在dockerfile中,在RUN语句中创build或复制文件或目录后,它不存在
我面临下面的dockerfile下面的问题ilustrated:
FROM richarvey/nginx-php-fpm WORKDIR /var/www/html RUN touch test.txt CMD while true; do sleep 1000; done
在Docker上面运行作为项目容器并通过login
docker exec -it project /bin/bash
我们将si'/var/www/html/test.txt'不存在。
这是更大的问题,尤其是如果我们而不是创build一个文件想要例如在PHP laravel项目中使用composer php:
WORKDIR /var/www/html COPY ./composer.json . COPY ./composer.lock . RUN composer install --no-scripts --no-autoloader
然后,我们不幸地发现, 供应商的目录不存在…
我做了研究,发现问题的原因是底层图像richarvey / nginx-php-fpm的dockerfile有指令:
VOLUME /var/www/html
在RUN语句中“阻止”子容器内容的访问。 这个问题与github上的这个话题有关
那么如果我们的基本映像使用VOLUME语句怎么办?
我们可以使用下面的解决方法(通过在CMD语句中使用临时目录和mv命令):
FROM richarvey/nginx-php-fpm WORKDIR /tmp/project RUN touch test.txt WORKDIR /var/www/html CMD mv /tmp/project/* /var/www/html/ &&\ while true; do sleep 1000; done
所以对于使用composer php的PHP项目,它会寻找像这样的例子:
FROM richarvey/nginx-php-fpm WORKDIR /tmp/project # cache vendors lib in separate docker layer COPY ./composer.json . COPY ./composer.lock . RUN composer install --no-scripts --no-autoloader # process project code ADD . . RUN composer dump-autoload --optimize &&\ composer run-script post-install-cmd &&\ php artisan key:generate &&\ ... WORKDIR /var/www/html # we use mv twice to move hidden files CMD mv /tmp/ocenomat/* /var/www/html/ &&\ mv /tmp/ocenomat/.* /var/www/html/ ; fi &&\ ...
- Windows 10上的Docker容器无法访问主机文件夹。 它显示为空。
- GitLab-CI多亚军PHPcomposer phpcaching
- 在caching错误中执行Docker-Compose结果中的Symfony Composer更新
- 如何在另一个容器退出后才启动Docker容器
- 在Docker容器中运行composer php安装
- Docker Cloud WordPress堆栈工作stream优化
- 如何使用php-fpm和php-cli运行docker-compose?
- composer php没有看到GD扩展
- 在Docker容器中使用git,composer,oh-my-zsh(UID / GID问题)