【问题标题】:Docker container namesDocker 容器名称
【发布时间】:2018-08-25 13:48:22
【问题描述】:

我正在使用 Docker on Rails 项目。我发现只有一种方法可以在彼此之间可靠地链接服务,即。 e.在docker-compose.yml 中指定容器名称:

version: '3'
services:
  db:
    container_name: sociaball_db
    ...
  web:
    container_name: sociaball_web
    ...
  sphinx:
    container_name: sociaball_sphinx
    ...

所以现在我可以在database.yml 中编写类似的内容,并且不用担心数据库容器会随机将其名称从db 更改为db_1

common: &common
  ...
  host: sociaball_db

但是,我只能同时运行三个容器。每当我尝试运行 docker-container up 时,如果某些容器没有关闭,它会引发错误。

ERROR: for sociaball_db  Cannot create container for service db: Conflict. The container name "/sociaball_db" is already in use by container "ee787c06db7b2a0205e3c1e552b6a5496545a78fe12d942fb792b27f3c38769c". You have to remove (or rename) that container to be able to reuse that name.

非常不方便。它通常会强制明确删除所有容器,以确保它们没有机会破坏。有办法解决吗?

【问题讨论】:

  • 您不需要手动指定container_name:;使用docker-compose.yml 文件中的服务标签作为主机名(例如host: db),容器应该可以相互访问。

标签: ruby-on-rails docker docker-compose


【解决方案1】:

当从一个 compose 文件运行多个容器时,将有一个默认网络,所有容器都连接到该网络(如果没有以不同方式指定)。

不需要通过容器或主机名来引用容器,因为 docker-compose 会自动设置一些 dns 服务发现,其中每个 docker-compose 服务都可以通过其服务名称解析(使用的密钥低于 services: .

因此,您的名为web 的服务可以使用名称db 访问您的数据库。无需为此用例指定容器名称。有关更多详细信息,请参阅docker docs on networking,它还演示了一个 Rails 应用程序访问数据库。

【讨论】:

    猜你喜欢
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2015-10-20
    • 2016-04-10
    • 2021-08-20
    • 1970-01-01
    相关资源
    最近更新 更多