我正在try 用Docker容器制作我的Golang API的生产版本.它在开发(与Air)中工作,但不断告诉我,可执行文件在生产一号中没有找到. 我测试了它,它被正确编译,并且它存在并且是可执行的.
为了确定,我将文本添加到了Dockerfile;
# first build the app binary
FROM golang:1.20-alpine
WORKDIR /app
COPY goapp/ .
RUN go mod download
RUN go build -o /app/executable
# check if the binary exists and is executable
RUN [ -f /app/executable -a -x /app/executable ]
CMD /app/executable
我使用docker-compose运行它:
version: '3.3'
services:
# db...
goapp:
build:
context: ./
dockerfile: ./docker/go/Dockerfile_prod
environment:
- SECRET=${SECRET}
- PORT=3000
- GO_ENV=production
- GIN_MODE=release
- MYSQL_HOST=${MYSQL_HOST}
- MYSQL_PORT=${MYSQL_PORT}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- SMTP_HOST=${SMTP_HOST}
- SMTP_USER=${SMTP_USER}
- SMTP_PASSWORD=${SMTP_PASSWORD}
- SENTRY_DSN=${SENTRY_DSN}
ports:
- 3000:3000
volumes:
- ./goapp:/app
- ./data/goapp:/app/data
depends_on:
db:
condition: service_healthy
我一直在用docker-compose -f ... build
上的--no-cache
面旗帜建造它
已try 将CMD
更改为ENTRYPOINT
,并带括号或不带括号.也试过了
ENTRYPOINT ["/bin/sh", "-c", "/app/executable"]
但我一直有这样的 idea :
goapp_1 | /bin/sh: /app/executable: not found
project_goapp_1 exited with code 127
为什么它不运行,我如何才能使它工作?谢谢.