我在docker-compose中设置了“127.0.0.101:80:80”以及为什么我从另一个子网获得网关和IP地址

问题描述 投票:0回答:1

**我在 docker-compose 中设置“127.0.0.101:80:80”

为什么我从另一个子网获得网关和 IP 地址**

“网关”:“172.31.0.1”, “IP地址”:“172.31.0.2”,

我使用docker-file创建docker容器:

version: '3.6'

services:
    web:
        image: nginx
        hostname: project1
        ports:
            - "127.0.0.101:80:80"
        networks:
            some_network:
                aliases:
                    - project1.local
                    - www.project1.local

networks:
    some_network:
        # Общая сеть со смежными проектами
        name: 'our_network'

**制作**

**docker container inspect 50631755223c**

我明白了

        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "53e14814f2bd19036439e5327a91416784920841435195d362c751d9995de5b5",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": [
                    {
                        **"HostIp": "127.0.0.101",**
                        "HostPort": "80"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/53e14814f2bd",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "our_network": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [
                        "pr1-web-1",
                        "web",
                        "project1.local",
                        "www.project1.local",
                        "50631755223c",
                        "project1"
                    ],
                    "NetworkID": "9610c4d18d33068427f3eb4d5c3ecce87da5afc9eef59f610757f10a98156915",
                    "EndpointID": "1d60133501de2edc51f45db05ba0727ced4d2a102d63a8e26a3d9a2f93567d04",
                    "Gateway": **"172.31.0.1",**
                    "IPAddress": **"172.31.0.2",**
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:1f:00:02",
                    "DriverOpts": null

**我在 docker-compose 中设置“127.0.0.101:80:80”

为什么我从另一个子网获得网关和 IP 地址**

“网关”:“172.31.0.1”, “IP地址”:“172.31.0.2”,

我希望网关与我所要求的来自同一子网。

docker docker-compose ip port
1个回答
0
投票

docker inspect
转储有关容器的非常低级的诊断信息。您几乎不需要那里的任何信息。更具体地说,它打印出的与 IP 相关的信息几乎毫无用处。

Docker 网络有两层。每个容器内部确实都有自己的 IP 地址,并且有一个与 Docker 网络对应的 IP 网络(在您的示例中,是手动配置的

some_network
网络)。 Docker 为该网络分配了 IPv4 地址范围 172.31.0.0/16。同样,这是您不需要了解的实现细节。

除此之外,您还请求将

ports:
从容器发布到主机。
ports: ['127.0.0.101:80:80']
按顺序表示,在绑定到地址
127.0.0.101
的主机接口上,将端口 80 转发到容器内的端口 80。这在
docker inspect
输出中可见(在
ports:
下),但该 IP 地址是 主机的 IP 地址,而不是 Docker 内部网络空间的一部分。

重申一下,实际上这些都不重要。如果您希望可以从同一主机上的容器外部访问容器端口,但不能从其他主机访问容器端口,我会使用普通的本地主机 IP 地址 127.0.0.1 作为绑定地址,并且我会使用

default
网络 Compose为您提供。我会将 Compose 设置减少到仅

version: '3.8'
services:
    web:
        image: nginx
        ports:
            - "127.0.0.1:80:80"

(删除所有

networks:
块、
hostname:
设置,并修复
ports:
中的主机 IP 地址)

并完全忽略

docker inspect
输出。

© www.soinside.com 2019 - 2024. All rights reserved.