当前位置: 首页 > 面试题库 >

Docker撰写如何将路径从一个容器装载到另一个容器?

商飞尘
2023-03-14
问题内容

nignx container和一个asset container拥有我所有资产的工具都来自grunt或其他一些工具。

现在在docker compose文件中,我想将asset container's的文件夹路径装入到其中,nginx container以便nginx可以提供该文件。

  • 我们该怎么做?我不记得了,但我认为有一种选择可以使我们将一个容器的路径与另一个容器共享。

  • 假设如果我将nginx扩展到2个容器,那么该安装将适用于所有nginx实例吗?

  • 如果我扩大规模,asset container那会发生什么?

  • 我也想将其安装在主机上,以便轻松进行开发。


问题答案:

您要做的就是使用一个卷,然后将该卷安装到您希望其出现的任何容器中。

完全在Docker中

您可以完全在Docker内部完成此操作。

这是一个示例(精简-您的实际文件中将包含更多内容)。

version: '3'
services:
  nginx:
    volumes:
      - asset-volume:/var/lib/assets
  asset:
    volumes:
      - asset-volume:/var/lib/assets

volumes:
  asset-volume:

底部是定义的单个体积,称为“资产体积”。

然后在每个服务中,您都告诉Docker在某个路径上安装该卷。我显示了容器内部的示例路径,只需将其调整为您希望它们在容器中的任何路径即可。

该卷是一个不受任何特定容器拥有的独立实体。它只是安装在它们每个中,并被共享。如果一个容器修改了内容,那么他​​们都将看到更改。

请注意,如果您只希望可以进行更改,则可以通过:ro在卷字符串的末尾添加,在某些服务中始终将卷挂载为只读。

services:
  servicename:
    volumes:
      - asset-volume:/var/lib/assets:ro

使用主机目录

或者,您可以使用主机上的目录并将其安装到容器中。这样做的好处是,您可以使用Docker外部的工具(例如GUI文本编辑器和其他工具)直接在文件上工作。

相同,只是您没有在Docker中定义卷,而是挂载了外部目录。

version: '3'
services:
  nginx:
    volumes:
      - ./assets:/var/lib/assets
  asset:
    volumes:
      - ./assets:/var/lib/assets

在此示例中,使用相对路径将本地目录“资产”安装到两个容器中./assets

根据环境使用两者

您还可以将其设置为其他开发和生产环境。将所有内容放入docker-compose.yml中, 除了 卷挂载。然后再制作两个文件。

  • docker-compose.dev.yml
  • docker-compose.prod.yml

在这些文件中,仅放置最小配置即可定义卷安装。我们将其与docker-compose.yml混合使用以获得最终配置。

然后用这个。它将使用docker-compose.yml中的配置,并将第二个文件中的任何内容用作替代或补充配置。

docker-compose -f docker-compose.yml \
    -f docker-compose.dev.yml \
    up -d

对于生产,只需使用prod文件而不是dev文件即可。

这里的想法是将大多数配置保留在docker-compose.yml中,并且将替代文件中的差异最小化。

例:

docker-compose.prod.yml

version: '3'
services:
  nginx:
    volumes:
      - asset-volume:/var/lib/assets

docker-compose.dev.yml

version: '3'
services:
  nginx:
    volumes:
      - ./assets:/var/lib/assets


 类似资料:
  • 我有两张docker的照片。其中一个docker映像(来自第一个容器)在运行时会生成一些文件,这些文件需要由另一个容器使用。 我可以这样做吗?

  • 问题内容: 我通常会看到将Docker容器的端口暴露给主机的解决方案。 就我而言,我想将本地端口从一个容器转发到另一个。假设我在具有 硬编码配置的 容器A 上运行服务, 以访问localhost 3306上的db 。但是我想在 容器B 上运行数据库服务器。 从A-localhost:3306到B-IP:3306的 端口转发的最佳方法是什么? 问题答案: 在您的容器中安装并在启动运行时安装 这将在您

  • 我想在一个docker容器中运行Rabbitmq服务器,并使用芹菜从另一个容器连接到它(http://celeryproject.org/) 我已使用以下命令运行rabbitmq。。。 然后通过 当我试图做非常基本的教程来验证http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html 我得

  • 是否可以将卷从一个容器装入另一个不同路径的容器中?例如。 null Docker-compose.yml 如果尝试这样做,则无法在上看到文件:

  • 问题内容: 我基于两个不同的图像创建了两个docker容器。一个数据库,另一个用于网络服务器。这两个容器都在我的Mac OS X上运行。 我可以从主机访问数据库容器,也可以从主机访问Web服务器。 但是,如何从Web服务器访问数据库连接? 我启动数据库容器的方式是 我开始了wls容器作为 我可以通过连接到主机上的数据库 我可以以以下方式访问主机上的wls: 问题答案: 最简单的方法是使用–link

  • 我基于两个不同的映像创建了两个docker容器。一个是db,另一个是WebServer。这两个容器都在我的mac OSX上运行。 我可以从主机访问db容器,也可以从主机访问webserver。 我可以访问主机上的wls作为