Dockerfile 与 docker compose,为什么文件内容没有在 compose 中复制

问题描述 投票:0回答:1

我有一个 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

docker docker-compose docker-build
1个回答
0
投票

解决了。

因此,每当我运行 compose 命令时,它都不会创建新图像,而是使用我测试时创建的旧图像,并且可能在第一次构建期间将空 shell.sh 放入图像中。在随后的每次 compose up 和 compose down 运行中,它只是创建和删除容器。

我必须删除图像,然后运行 compose,创建一个新的正确图像,现在一切都很好。

© www.soinside.com 2019 - 2024. All rights reserved.