Executable file not found in $PATH: unknown. Как исправить?
Всем привет!
Dockerfile
# ------------------------------------------------------------------------------
# Base image
# ------------------------------------------------------------------------------
FROM golang:1.21-bullseye AS golang_base
ENV USER=nonroot
ENV GROUP=nonroot
ENV UID=1000
ENV GID=1000
ENV GO111MODULE="on"
ENV GOOS=linux
WORKDIR /app
COPY . .
RUN go mod tidy
RUN addgroup --gid="${GID}" ${GROUP}
RUN adduser \
--disabled-password \
--gecos "" \
--home "/nonexistent" \
--shell "/sbin/nologin" \
--no-create-home \
--uid "${UID}" \
--ingroup "${GROUP}" \
"${USER}"
# ------------------------------------------------------------------------------
# Test image
# ------------------------------------------------------------------------------
FROM golang_base AS golang_test
ENV GO111MODULE="on"
ENV GOOS=linux
WORKDIR /app
RUN mkdir -m 777 /var/www
CMD go test ./...
# ------------------------------------------------------------------------------
# Build image
# ------------------------------------------------------------------------------
FROM golang_base AS golang_build
ENV GO111MODULE="on"
ENV GOOS=linux
RUN mkdir -m 777 /nonexistent
RUN apt-get update && apt-get install -y git protobuf-compiler golang-goprotobuf-dev
WORKDIR /app
RUN mkdir -m 777 /var/www
RUN go build -o /var/www/server /app/cmd/main.go
RUN chmod +x /var/www/server
RUN go install google.golang.org/protobuf/cmd/[email protected]
RUN go install google.golang.org/grpc/cmd/[email protected]
# ------------------------------------------------------------------------------
# Development image
# ------------------------------------------------------------------------------
FROM golang_build AS golang_dev
ENV APP_PORT=8080
ENV USER=nonroot
USER ${USER}
VOLUME /app
WORKDIR /app
EXPOSE ${APP_PORT}
CMD go run /app/cmd/main.go
# ------------------------------------------------------------------------------
# Production image
# ------------------------------------------------------------------------------
FROM alpine:3.7 AS golang_prod
ENV APP_PORT=8080
ENV USER=nonroot
COPY --from=golang_base /etc/passwd /etc/passwd
COPY --from=golang_build /var/www/server /var/www/server
RUN chmod 755 /var/www/server
RUN chown ${USER} /var/www/server
RUN chmod a+x /var/www/server
USER ${USER}
WORKDIR /var/www
EXPOSE ${APP_PORT}
CMD ["server"]
docker-compose.yml
version: '3.9'
networks:
database:
services:
database: &database
container_name: database
image: postgres
healthcheck:
test: [ "CMD", "pg_isready", "-q", "-d", "${POSTGRES_DB}", "-U", "${POSTGRES_USER}" ]
timeout: 45s
interval: 2s
retries: 10
env_file:
- .env
ports:
- ${POSTGRES_PORT_EXTERNAL}:${POSTGRES_PORT}
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_PORT=${POSTGRES_PORT}
volumes:
- profile-database:/var/lib/postgresql/data:delegated
networks:
- database
prod:
container_name: profile
build:
context: .
dockerfile: ./build/dockerfiles/golang/Dockerfile
target: golang_prod
volumes:
- ./:/app
environment:
- POSTGRES_HOST=database
- POSTGRES_PORT=${POSTGRES_PORT}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
ports:
- ${GRPC_PORT}:${GRPC_PORT}
- "40000:40000"
security_opt:
- seccomp:unconfined
cap_add:
- SYS_PTRACE
depends_on:
database:
condition: service_healthy
networks:
- database
volumes:
profile-database: { }
запускаю
docker-compose run --rm prod
выдает
docker-compose run --rm prod
[+] Building 0.0s (0/0) docker:default
[+] Creating 1/0
✔ Container database Running 0.0s
[+] Building 0.0s (0/0) docker:default
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "server": executable file not found in $PATH: unknown
Прошу помогите. Как исправить?
UPD:
приложение - это service профилей на grpc
https://github.com/3110Y/cc-profile/tree/init
UDP2:
даже такое приложение вызывает такую ошибку
package main
import "fmt"
func main() {
fmt.Println("hhhh")
}