2016-04-26 84 views
0

删除文件这是很简单,但我没有任何的解释,为什么这不工作:从一个码头工人容器

在我Dockerfile:

RUN rm -rf /etc/nginx/sites-*/* 

一旦建成和运行,容器内该文件仍然存在:

ls -lrth /etc/nginx/sites-*/* 
-rw-r--r-- 1 root root 2.1K Jan 26 23:34 /etc/nginx/sites-available/default 
lrwxrwxrwx 1 root root 34 Apr 21 15:58 /etc/nginx/sites-enabled/default -> /etc/nginx/sites-available/default 
-rw-r--r-- 1 root root 691 Apr 21 16:12 /etc/nginx/sites-available/default.conf 
lrwxrwxrwx 1 root root 39 Apr 21 16:17 /etc/nginx/sites-enabled/default.conf -> /etc/nginx/sites-available/default.conf 

我可以在日构建看到,该行动是做:

Step 13 : RUN rm -rf /etc/nginx/sites-*/* 
---> Running in 0fa2deabe45c 
---> 33e7b85a6c05 

这是我Dockerfile:

FROM ubuntu:14.04.4 

ENV DEBIAN_FRONTEND noninteractive 

RUN apt-get update 
RUN apt-get install -y software-properties-common 
RUN add-apt-repository ppa:nginx/stable 
RUN add-apt-repository ppa:ondrej/php 

RUN add-apt-repository ppa:ondrej/php 

RUN apt-get update 
RUN apt-get upgrade -y 
RUN apt-get -y --force-yes install php7.0-fpm git php7.0-mysql php7.0-curl 

RUN apt-get install --force-yes -y nginx 

RUN rm -rf /etc/nginx/sites-*/* 
+0

你是否试过简单的'rm -rf/etc/nginx/sites- *'来查看它是否与通配符有关?或者你是否只在'*/default'文件/目录之后? – Marakai

+0

我在容器内尝试过。有用。从Dockerfile它不会这样做。 – 4m1nh4j1

+0

你可以显示你的Dockerfile,一个复制器吗? – user2915097

回答

0

这似乎预期为我工作。

我开始把本地设置你的Dockerfile:

$ mkdir dockertest 
$ cd dockertest 
$ cat > Dockerfile 
<paste dockerfile here> 

然后建设中的形象:

$ docker build -t dockertest . 

你可以看到完整的构建过程here

一旦图像建,我能证明,这些目录是空的:

bash-4.3$ docker run --rm dockertest ls -l /etc/nginx/sites-{available,enabled}/ 
/etc/nginx/sites-available/: 
total 0 

/etc/nginx/sites-enabled/: 
total 0 
bash-4.3$ 

你会注意到,我没有在以前的命令中使用通配符。如果我不是运行这个...

$ docker run --rm dockertest ls -l /etc/nginx/sites-*/* 

...这将列出在我主机文件系统中的文件,因为外壳通配符扩展发生在运行此命令之前。你可以通过运行安全地做到这一点:

$ docker run --rm dockertest sh -c 'ls -l /etc/nginx/sites-*/*' 
相关问题