我有一个dockerfile,可从composer加载一些东西到容器上的供应商文件夹中。现在,我想将容器上的供应商文件夹与我的主机环境链接起来。如果我使用docker-compose up启动服务,则供应商文件夹为空。我该怎么做才能将数据保存在容器中?
这是我的dockerfile:
FROM php:7.3.3-apache-stretch
RUN apt-get update && \
apt-get install -y --no-install-recommends nano \
git \
openssh-server
RUN curl -s https://getcomposer.org/installer | php && \
echo "{}" > composer.json && \
php composer.phar require slim/slim "^3.0" && \
chown -R www-data. .
VOLUME /var/www/html/vendor
这是我的docker-compose.yml:
version: '3.2'
services:
slim:
build:
context: ./slim
ports:
- "1337:1337"
networks:
- backend
volumes:
- ./slim/vendor:/var/www/html/vendor
networks:
backend:
感谢您的帮助
答案 0 :(得分:1)
您看到的是预期的行为。
如果要填充供应商文件夹并在主机上也可用,则必须在映射发生之后运行安装,而不是相反。
此命令:
curl -s https://getcomposer.org/installer | php && \
echo "{}" > composer.json && \
php composer.phar require slim/slim "^3.0" && \
chown -R www-data. .
应成为您的ENTRYPOINT或CMD,以便在容器启动时(而不是在构建时)运行它。
我建议将这些命令放在安装脚本中并运行。看起来更干净,更容易理解。
希望这会有所帮助,但是如果您需要更多信息,请告诉我。