为什么“RUN rm /etc/nginx/conf.d/default.conf”没有成功?
我不想让我的nginx /etc/nginx/conf.d/default.conf
镜像拥有/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
我的docker-compose.yml为nginx服务添加了名称卷
volumes: - conf:/etc/nginx/conf.d
更新:
我终于发现,这是因为我在我的docker-compose.yml中创build了一个名为volume的名称,它创build/etc/nginx/conf.d/default.conf
因此/etc/nginx/conf.d/default.conf
rm根本不起作用。 但是为什么创build名称卷将导致创build`/etc/nginx/conf.d/default.conf?
UPDATE2:
随着第二个答案,我终于明白了为什么。 所以RUN rm /etc/nginx/conf.d/default.conf
确实有效。 问题是我在运行RUN rm /etc/nginx/conf.d/default.conf
之前创build的docker-compose.yml中使用了一个卷,并且该卷有default.conf。
发生了这样的情况,我第一次使用没有rm的dockerfile并运行docker docker-compose up
,然后我添加了rm来重build镜像并再次运行docker-compose up
。 但我永远不会更改我的docker-compose.yml或清理我的卷。 所以无论我如何构build/重build我的图像,文件都在那里。
我删除了所有旧的卷(使用docker卷rm docker volume ls -q -f dangling=true
)后终于工作。
我在这里留下我的问题,而不是删除它,以防万一别人可能会像我一样犯同样的错误:$
卷是文件系统的运行时间更改。 构build运行没有你的音量来创build图像。 因此,该文件在映像中被删除,但是您在装有该文件的容器中安装一个卷。
修复方法是不使用卷,以便可以查看映像中存在的文件系统,也可以从卷中删除该文件。 以下内容适用于清理卷中的文件:
docker run -it --rm -v ${vol_name}:/target busybox rm /target/default.conf
我不认为你正在使用你的新形象。
我通过简单地创build一个新的Dockerfile来testing它:
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