Docker删除下载的文件
我正在尝试设置一个Docker容器来testing一个Magento扩展。 我希望这样做,像这样的Dockerfile:
FROM php:5.4-apache WORKDIR /var/www/html ADD http://www.magentocommerce.com/downloads/assets/1.9.0.1/magento-1.9.0.1.tar.gz /var/www/html # Other installation steps
但是那失败了:
2014/09/27 17:03:25 lchown /mnt/sda1/var/lib/docker/aufs/mnt/d5ced8f20d760458093f2993ea25ffa9a644c93d5b134e793f820f53dfc2d70d/var/www/html/tmp: not a directory
我收集它与我在OS X上使用boot2docker有关。(我回想起OS X与Docker存在一些文件系统共享问题。)所以我再次尝试使用这个Dockerfile:
FROM php:5.4-apache WORKDIR /var/www/html # We should be able to use ADD to fetch a remote file, but # something is causing that to fail (OS X Docker limitations, I guess?) RUN ["/usr/bin/curl", "-O", "http://www.magentocommerce.com/downloads/assets/1.9.0.1/magento-1.9.0.1.tar.gz"] RUN ["/bin/tar", "-xzf", "magento-1.9.0.1.tar.gz"] # Other installation steps
当我运行上面的时候,curl执行得很好,并且没有错误退出,但是最终的容器不包含下载的文件,所以下游的tar命令失败了。
Step 2 : RUN ["/usr/bin/curl", "-O", "http://www.magentocommerce.com/downloads/assets/1.9.0.1/magento-1.9.0.1.tar.gz"] ---> Running in 2695c5e95f77 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 21.9M 100 21.9M 0 0 817k 0 0:00:27 0:00:27 --:--:-- 842k ---> bb716a60c4ef Removing intermediate container 2695c5e95f77 Step 3 : RUN ["/bin/tar", "-xzf", "magento-1.9.0.1.tar.gz"] ---> Running in 95cc533947c1 tar (child): magento-1.9.0.1.tar.gz: Cannot open: No such file or directory tar (child): Error is not recoverable: exiting now /bin/tar: Child returned status 2 /bin/tar: Error is not recoverable: exiting now 2014/09/27 17:07:47 The command [/bin/tar -xzf magento-1.9.0.1.tar.gz] returned a non-zero code: 2
如果我检查中间容器,文件确实不在那里。
$ docker run bb716a60c4ef /bin/sh -c 'pwd && ls -al' /var/www/html total 8 drwxr-xr-x 2 www-data www-data 4096 Sep 27 21:09 . drwxr-xr-x 4 root root 4096 Sep 23 11:09 ..
那么它到底在哪里,我如何设置一个Dockerfile来允许我下载和修改文件系统?
这里有几件事要注意。 我将从第一个Dockerfile
开始,因为那个修复很简单:
FROM php:5.4-apache WORKDIR /var/www/html ADD http://www.magentocommerce.com/downloads/assets/1.9.0.1/magento-1.9.0.1.tar.gz /var/www/html/ # Other installation steps
你懂了吗? 将/
添加到目标的末尾会告诉ADD
命令将其视为一个文件夹。 请参阅https://docs.docker.com/reference/builder/#add上复制规则的第三个要点。
第二个Dockerfile
对我来说有点神秘。 但我怀疑它与父图像设置/var/www/html
作为一个卷跳过层版本。 请参阅https://github.com/docker-library/php/blob/master/5.4/apache/Dockerfile#L46 。