我有一个dockerfile,它从容器中的vendor文件夹中的composer加载一些Stuff。现在我想将容器上的供应商文件夹与我的主机环境相关联。如果我使用docker-compose启动服务,则vendor文件夹为空。我该怎么做才能将数据保存在容器上?
这是我的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:
谢谢您的帮助
你看到的是预期的行为。
如果您希望在主机上填充并提供供应商文件夹,那么您必须在映射发生后运行安装,而不是相反。
这个命令:
curl -s https://getcomposer.org/installer | php && \
echo "{}" > composer.json && \
php composer.phar require slim/slim "^3.0" && \
chown -R www-data. .
应该成为您的ENTRYPOINT或CMD,以便在容器启动时(而不是在构建时)运行它。
我建议将这些命令放在安装脚本中并运行它。理解它会更清晰,更容易理解。
希望这会有所帮助,但如果您需要更多信息,请告诉我。