我有一个包含2个服务(容器)的名为“web”和“db”的撰写文件。

{
    "version": "2",
    "services": {
        "web": {
            "image": "nodejs:latest",
            "ports": ["80"]
        },
        "db": {
            "image": "mysql:latest",
            "ports": ["3306"]
        }
    }
}

我可以使用“db”作为数据库的ip从Web容器访问db容器。如下所示,在撰写文件中使用“主机名”有什么好处?
{
    "version": "2",
    "services": {
        "web": {
            "image": "nodejs:latest",
            "hostname": "web",
            "ports": ["80"]
        },
        "db": {
            "image": "mysql:latest",
            "hostname": "db",
            "ports": ["3306"]
        }
    }
}

最佳答案

version '2' of docker-compose syntax中引入了在容器之间的专用网络中自动发现主机的功能。在您只能通过容器的链接别名引用容器之前。还有其他创建发现的解决方案-例如。添加代理或“大使”容器。

话虽如此,我会看到3个使用主机名的原因:

  • 发现基于服务名,而服务名并不总是需要是主机名。
  • 一项服务(例如Web服务器)中可以有多个主机名
  • 如果要在不同环境之间保持一致的配置,则可以使用主机名来描述应用程序正在使用的其他端点,而不是依赖于服务名
  • 关于docker - Docker撰写和主机名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42291409/

    10-16 17:26