为什么" RUN rm /etc/nginx/conf.d/default.conf"没成功?

时间:2017-11-08 09:53:27

标签: docker nginx dockerfile

我不希望我的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 )后,它终于有效了。

我在这里留下我的问题,而不是删除它,以防其他人像我一样犯同样的错误:$

2 个答案:

答案 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