Docker Compose和主机名

3
我有一个包含两个服务(容器)的Compose文件,分别命名为“web”和“db”。
{
    "version": "2",
    "services": {
        "web": {
            "image": "nodejs:latest",
            "ports": ["80"]
        },
        "db": {
            "image": "mysql:latest",
            "ports": ["3306"]
        }
    }
}    

我能通过将数据库的IP地址设置为“db”,从Web容器访问数据库容器。如果按照下面的compose文件在其中使用“hostname”,那会有什么优势呢?
{
    "version": "2",
    "services": {
        "web": {
            "image": "nodejs:latest",
            "hostname": "web",
            "ports": ["80"]
        },
        "db": {
            "image": "mysql:latest",
            "hostname": "db",
            "ports": ["3306"]
        }
    }
}
1个回答

3
自动发现私有网络中容器主机的功能已经在Docker Compose语法版本“2”中引入。在此之前,您只能通过它们的链接别名引用容器。还有其他解决方案可以创建发现,例如添加代理或“大使”容器。
话虽如此,我认为使用主机名有三个原因:
- 发现基于服务名称,该名称不一定需要是主机名。 - 一个服务中可能有多个主机名(例如Web服务器)。 - 如果您想在不同环境之间保持一致的配置,则会使用主机名来描述应用程序正在使用的其他端点,而不是依赖于服务名称。

2
顺便提一下:<quote>我有一个包含两个服务(容器)的组合文件,分别命名为“web”和“db”。</quote> - 这些不是容器名称,而是服务名称。 容器名称是自动生成的,但您可以使用container_name属性进行设置。 - Jacek Lawniczak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接