【问题标题】:Dockerfile build volume changes not reflected on mounted local folder? (OS X / boot2Docker)Dockerfile 构建卷更改未反映在已安装的本地文件夹上? (OS X / boot2Docker)
【发布时间】:2015-12-04 02:09:48
【问题描述】:

使用 docker-compose 我有一个 Dockerfile,它为 Sails JS 应用程序构建环境。在我的 Dockerfile 中,我使用 sails new .(通过 docker-compose 映射到我的本地文件系统的文件夹)生成了一个新的 Sails 脚手架项目。

当我运行docker-compose build 时,一切似乎都成功构建了。我在本地机器上使用docker-compose up -d。然后我导航到在主机上映射到本地的文件夹,即在主机 (vm) 上生成新 Sails 项目的文件夹。我期待在我的本地文件夹中看到在docker-compose build 期间在主机上生成的所有文件。该文件夹是 BLANK 吗?怎么了?

我的基本 docker-compose 文件:

node:
  restart: "always"
  build: ./cnt/node
  ports:
    - "8080:8080"
  volumes:
    - ./src:/var/www/html
  # DEBUG: conveniently used to keep a container running
  command: /bin/bash -c 'tail -f /dev/null'

注意: ./src 是我的源代码所在的本地文件夹。这被映射到 HOST 机器上的 /var/www/html (webroot)。

以下是 ./cnt/node 中用于生成 Sails 脚手架的 Dockerfile 的最后几行:

WORKDIR /var/www/html
RUN sails new .
RUN touch test.txt

我执行时一切都运行成功(没有错误):

docker-compose build
docker-compose up -d

完成后,我cd src 检查了我希望看到我的 Sails 应用程序脚手架的源目录,但它是 EMPTY。有没有搞错?!没有错误?我错过了什么?

这是否与 docker-compose 文件有关,并且我正在构建的图像是通过 build: ./cnt/node 构建的,然后我将卷安装在 compose 文件中?在生成 Sails 脚手架之前,是否需要首先安装 VOLUMES?

谢谢!

【问题讨论】:

  • 您的 src 文件夹在哪里?只有 /Users/... 在您的主机和 VM 之间共享:stackoverflow.com/a/33998695/6309
  • @VonC 是的。了解 /Users 文件夹限制,我的 src 文件夹位于 /Users 的子文件夹中

标签: docker boot2docker dockerfile docker-compose


【解决方案1】:

卷仅在运行时挂载,build 专门设计为可重现,因此在构建期间不允许任何外部操作。

您必须使用docker-compose run node ...在主机上生成脚手架

【讨论】:

  • 正确答案!不幸的是docker-compose run node ... 将生成一个新的图像层,这是我在生成脚手架时要避免的事情。通过创建启动脚本 (startup-check.sh) 并将其添加到 docker-compose 中的命令选项解决了我的问题:command: /bin/bash -c '/startup-check.sh && [your_standard_container_command]'
  • docker-compose run node 不会创建新的图像层,但会创建一个新的容器。您可以使用docker-compose run --rm node 在容器完成后立即移除它,如果这是一个问题。创建新容器是非常轻量级的,因此可能不需要担心。入口点脚本(如您所述)是另一个常见选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 2019-05-02
  • 1970-01-01
  • 2012-09-06
  • 2021-05-08
相关资源
最近更新 更多