Docker组合 – 从容器B中的容器A访问数据

这是我的问题:

我有一个容器A(Node.js)和一个容器B(nginx)。 在容器A的Dockerfile中,我从源中创build了几个文件,因为它们需要将服务器运行到名为build的文件夹中。 我想从容器B访问这个文件夹来提供静态文件。

目的是要有一个简单的工作stream程,你可以只是用源码克隆回购,并运行docker-compose up --build和build立一切正在运行。 在这种情况下,主机没有构build文件所需的软件,所以构build必须在Docker容器内部发生。

我的第一个尝试几乎工作如下:

 version: "2" services: nginx: volumes_from: - node node: volumes: - /code/build 

当我第一次build立docker构build和build立一切似乎工作正常,容器是从容器A与其中的构build文件创build和容器B可以按预期访问它们。

但是,更新源时会发生此问题。 当发生这种情况时,新的构build文件不会replace容器内的旧构build文件,因为现有的容器似乎具有优先权。 所以在第一次以后,我总是有容器A和B的旧文件。

我调查了一种方法来强制卷从头开始重新创build每次我运行docker-compose build但没有find任何东西。 我发现的唯一的事情就是使用docker-compose stop && docker-compose rm但是每次这样做看起来有点冒险,另外与仅仅用新版本replace现有容器相比,这会导致相当长的停机时间docker-compose up

有什么合适的解决scheme来实现我想要实现的目标吗?

我会重做工作stream,使用挂载在多个容器中的命名卷,其中一个容器是具有应用程序构build环境的更新程序。 然后在启动时,更新程序从git中取出最新的内容,并将共享卷更新为其CMDENTRYPOINT

您的撰写文件看起来类似于:

 version: "2" volumes: build: driver: local services: nginx: volumes: - build:/code/build updater: volumes: - build:/code/build 

然后,在任何更改上,您都可以运行docker-compose run updater ,并将最新的更改推送到nginx可以使用的卷上,而无需停止其他容器。 由于这是一个批处理作业,所以即使是一个docker-compose up工作人员也可以重新启动更新程序。