我写了一个
Dockerfile
来制作我的项目的图像:
FROM golang:alpine AS builder
WORKDIR /app
ADD go.mod .
COPY . .
RUN go build -o bot .
FROM alpine
WORKDIR /app
COPY --from=builder /app/bot /app/bot
COPY migration migration
COPY migrate.sh .
RUN chmod +x migrate.sh
CMD ["./bot"]
我需要复制
migration
目录和 migrate.sh
脚本来进行迁移。
然后我写了一个
docker-compose
文件:
services:
postgres:
image: postgres:latest
container_name: postgres
restart: always
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
ports:
- "${POSTGRES_PORT}:5432"
networks:
- bot-reminder
bot:
image: my_image
container_name: bot
restart: always
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_HOST: ${POSTGRES_HOST}
POSTGRES_PORT: ${POSTGRES_PORT}
TOKEN: ${TOKEN}
TIMEOUT: ${TIMEOUT}
MAX_MSG_SIZE: ${MAX_MSG_SIZE}
CHANNEL_ID: ${CHANNEL_ID}
LOG_LEVEL: ${LOG_LEVEL}
networks:
- bot-reminder
depends_on:
- postgres
command: ["./migrate.sh", "up"]
networks:
bot-reminder:
但是当我运行
docker compose up -d
时,bot
容器给出了错误:
exec ./migrate.sh: no such file or directory
我运行命令
docker export bot > files.tar
。我在files.tar
里面看到了所有必要的文件。
但是为什么容器会报错呢?为什么它不执行它?
我尝试用不同的方式编写命令
./migrate.sh up
:app/migrate.sh
,./app/migrate.sh
,/app/migrate.sh
,但没有成功。
我还添加了命令
ls
,它打印了所有必需的文件。
您可以检查您的
.dockerignore
文件吗?