我不希望我的nginx docker镜像有/etc/nginx/conf.d/default.conf
所以我写了一个简单的nginx dockerfile,主要是添加RUN rm /etc/nginx/conf.d/default.conf
令我惊讶的是它不起作用。 /etc/nginx/conf.d/default.conf仍然存在。
为什么以及如何删除它?
我的dockerfile:
FROM nginx:latest
# Copy custom configuration file from the current directory
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/nginx.conf
COPY conf.d/node2 /etc/nginx/conf.d/node2
EXPOSE 80 8080
我的用于nginx服务的docker-compose.yml添加了名称volumn
volumes:
- conf:/etc/nginx/conf.d
更新
我终于发现这是因为我在docker-compose.yml中创建了一个创建/etc/nginx/conf.d/default.conf
的名称卷,因此dockerfile中的rm根本不起作用。但是为什么创建名称卷会导致创建`/etc/nginx/conf.d/default.conf?
UPDATE2:
我得到了第二个答案,我终于明白了原因。所以RUN rm /etc/nginx/conf.d/default.conf
确实奏效了。问题是我在运行RUN rm /etc/nginx/conf.d/default.conf
之前创建的docker-compose.yml中使用了一个卷,该卷有default.conf。
就是这样,我首先使用没有rm的dockerfile并运行docker-compose up
,然后我添加了rm来重建图像并再次运行docker-compose up
。但我从来没有改变我的docker-compose.yml或清理我的音量。所以无论我如何构建/重建我的图像,文件就在那里。
删除所有旧卷(使用 docker volume rm docker volume ls -q -f dangling=true
)后,它终于有效了。
我在这里留下我的问题,而不是删除它,以防其他人像我一样犯同样的错误:$
答案 0 :(得分:0)
我认为你没有使用你的新形象。
我通过简单地创建一个新的Dockerfile来测试它:
FROM nginx:alpine
RUN rm /etc/nginx/conf.d/default.conf
我执行了以下命令:
docker build -t test-nginx .
docker run -it --name mynginx-instance test-nginx ls -la /etc/nginx/conf.d
docker rm mynginx-instance
答案 1 :(得分:0)
卷是文件系统的运行时更改。构建在没有卷的情况下运行以创建映像。因此,文件将在图像中删除,但随后您将在容器中装入包含该文件的卷。
修复是要么不使用卷,所以您可以看到图像中存在的文件系统,或者您可以从卷中删除该文件。以下内容适用于从卷清理文件:
docker run -it --rm -v ${vol_name}:/target busybox rm /target/default.conf