2016-04-26 189 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-*/*' 
相關問題