我有一个 Dockerfile,如果我用它制作一个容器,它可以工作,但当我通过 compose yaml 文件运行它时,它不能完全工作。
下面是 Dockerfile,我将 shell.sh 从本地计算机复制到容器,在这种情况下一切正常。
Dockerfile:
FROM alpine:latest
LABEL maintainer="[email protected]"
RUN mkdir -p /tmp/hasham
COPY ./shell.sh /tmp/hasham/
RUN chmod 775 /tmp/hasham/shell.sh
RUN echo '*/1 * * * * /tmp/hasham/shell.sh' > /etc/crontabs/root
CMD crond && sleep infinite
但是问题是每当我运行这个 dockerfile 作为 docker compose 的一部分时,在容器上创建的 shell 脚本都是空的。文件名位于容器中,但没有内容。我不明白为什么只有在运行 compose 时才会发生这种情况。我也尝试了另一个简单的文本文件,但遇到了同样的问题,文件已创建,但大小为零且没有内容。
请有人告诉我我做错了什么吗?
下面是我使用的 yaml 文件,它引用上面的 Dockerfile 来生成容器。
测试.yaml
services:
my_app:
container_name: myapp
build:
dockerfile: ./alpine.Dockerfile
networks:
- mynetwork
networks:
mynetwork:
name: mynetwork
driver: bridge
请帮忙!
谢谢
H
不认为这与权限有什么关系吗?
docker 构建工作正常(创建镜像,然后创建容器)
docker compose 无法正常工作,我得到空 /tmp/hasham/shell.sh (使用上面的 dockerfile 进行组合)
docker compose --project-name my_project -f test.yaml up -d
解决了。
因此,每当我运行 compose 命令时,它都不会创建新图像,而是使用我测试时创建的旧图像,并且可能在第一次构建期间将空 shell.sh 放入图像中。在随后的每次 compose up 和 compose down 运行中,它只是创建和删除容器。
我必须删除图像,然后运行 compose,创建一个新的正确图像,现在一切都很好。