【问题标题】:Empty volume folder after docker-compose updocker-compose up 后清空卷文件夹
【发布时间】:2019-04-02 18:01:50
【问题描述】:

我有一个 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:

感谢您的帮助

【问题讨论】:

  • 尝试在卷路径的开头删除./ 是 docker 上下文根目录 - 即您运行 docker-compose build 命令的目录。
  • 如果我把点放在开头,文件夹将不再在主机端创建。以点开头,docker 在主机端创建了供应商文件夹,但也删除了容器端的所有文件和文件夹。

标签: docker docker-compose


【解决方案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,以便它在容器启动时运行(而不是在构建时)。

我建议将这些命令放在安装脚本中并运行它。它看起来更清晰,更容易理解。

希望这会有所帮助,但如果您需要更多信息,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-05
    • 2020-04-06
    • 2018-03-25
    • 2018-12-18
    • 2018-08-18
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多