繁体   English   中英

运行容器时如何使用docker主机名

[英]How to use docker hostname when running a container

我在Docker中运行RabbitMQ

>docker run -d --hostname my-rabbit --name some-rabbit --rm --network my-bridge rabbitmq
  • 我的容器namesome-rabbit,hostnamemy-rabbit
  • 容器已连接到my-bridge网络
  • 我的应用程序也已连接到我的网桥网络

docker network inspect my-bridge产生:

[
    {
        "Name": "my-bridge",
        "Id": "c996f5318b2b3ff907b6680e41c4551f184f2c43b0df43fd6916fa8d1707e427",
        "Created": "2018-12-26T19:40:46.6982856Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.21.0.0/16",
                    "Gateway": "172.21.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "98d81ba991febbc9dc0775effc79a2b083f62fe563aad3ce146e56bab5b09f4c": {
                "Name": "some-rabbit",
                "EndpointID": "acb3da3e91d655a3ed245fa3938edd681318129e514b83db07e1b4efd4f2bfc2",
                "MacAddress": "02:42:ac:15:00:02",
                "IPv4Address": "172.21.0.2/16",
                "IPv6Address": ""
            },
            "9fdf456e352e932b13530223f736028f357e63ead5ace042a13200f6d5744d62": {
                "Name": "dockercompose8897046891659778892_publisher_1",
                "EndpointID": "f45ba7f9c7832d3514d22ddf29bc19f1e74529cb371b335542c9eb54469fe7a4",
                "MacAddress": "02:42:ac:15:00:04",
                "IPv4Address": "172.21.0.4/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

docker inspect some-rabbit生产:

        ...
        "Config": {
            "Hostname": "my-rabbit",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "25672/tcp": {},
                "4369/tcp": {},
                "5671/tcp": {},
                "5672/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/lib/rabbitmq/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.10",
                "RABBITMQ_LOGS=-",
                "RABBITMQ_SASL_LOGS=-",
                "RABBITMQ_GPG_KEY=0A9AF2115F4687BD29803A206B73A36E6026DFCA",
                "RABBITMQ_VERSION=3.7.8",
                "RABBITMQ_GITHUB_TAG=v3.7.8",
                "RABBITMQ_DEBIAN_VERSION=3.7.8-1",
                "LANG=C.UTF-8",
                "HOME=/var/lib/rabbitmq"
            ],
            "Cmd": [
                "rabbitmq-server"
            ],
            "ArgsEscaped": true,
            "Image": "rabbitmq",
            "Volumes": {
                "/var/lib/rabbitmq": {}
            },
            "WorkingDir": "",
            "Entrypoint": [
                "docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "bac2e155323c1ec94e145a37f45f8bc0d32e28a2b363cb1c9f3d4ed922a91a56",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "25672/tcp": null,
                "4369/tcp": null,
                "5671/tcp": null,
                "5672/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/bac2e155323c",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "my-bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "98d81ba991fe"
                    ],
                    "NetworkID": "c996f5318b2b3ff907b6680e41c4551f184f2c43b0df43fd6916fa8d1707e427",
                    "EndpointID": "acb3da3e91d655a3ed245fa3938edd681318129e514b83db07e1b4efd4f2bfc2",
                    "Gateway": "172.21.0.1",
                    "IPAddress": "172.21.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:15:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

结论:

  • Rabbitmq和我的应用程序都在同一网络中运行
  • RabbitMQ有一个自定义的hostname my-rabbit ,在检查容器时可以看到它: "Hostname": "my-rabbit"

但是,当我的应用尝试通过地址my-rabbit到达RabbitMQ时,连接失败。 仅当我使用容器名称作为地址( some-rabbit )时,它才有效。

我对--hostname理解是错误的还是使用不正确? 什么时候使用自定义--hostname有用?

主机名仅对同一容器内的应用程序可见。 Docker的嵌入式DNS不会解析容器主机名。 您可以使用Docker的DNS解决的问题是:

  • 容器名称
  • 容器编号
  • 容器的网络别名(包括组合文件中的服务名称)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM