首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的停靠网络网关IP不能从我的主机操作系统访问?

为什么我的停靠网络网关IP不能从我的主机操作系统访问?
EN

Stack Overflow用户
提问于 2022-09-28 00:57:36
回答 1查看 111关注 0票数 0

我正在努力使下列设置正常工作:

  • --我的本地机器OS = Linux
  • --我正在这个本地机器
  • 上构建一个

容器,我计划在容器中为数据库添加种子,然后对这个容器(我也会在linux机器上旋转)在本地运行测试(我也会在linux机器上旋转)。

不幸的是,当运行我的测试并试图连接到容器时,默认的bridge网络网关IP是不可访问的。

我的docker-compose.yaml文件如下

代码语言:javascript
复制
version: "3.4"

services:
  integration-test-mysql:
    image: mysql:8.0
    container_name: ${MY_SQL_CONTAINER_NAME}
    environment:
      - MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
    ports:
      - "3306:3306"
    volumes:
      # - ./src/db:/usr/src/db #Mount db folder so we can run seed files etc.
      - ./seed.sql:/docker-entrypoint-initdb.d/seed.sql
    network_mode: bridge
    healthcheck:
      test: "mysqladmin -u root -p$MYSQL_ROOT_PASSWORD -h 127.0.0.1 ping --silent 2> /dev/null || exit 1" 
      interval: 5s
      timeout: 30s
      retries: 5
      start_period: 10s 
    entrypoint: sh -c "
      echo 'CREATE SCHEMA IF NOT EXISTS gigs;' > /docker-entrypoint-initdb.d/init.sql;
      /usr/local/bin/docker-entrypoint.sh --default-authentication-plugin=mysql_native_password
      "

在运行docker network ls时,我看到以下内容

代码语言:javascript
复制
 docker network ls
NETWORK ID     NAME                  DRIVER    SCOPE
42a11ef835dd   bridge                bridge    local
c7453acfbc98   host                  host      local
48572c69755a   integration_default   bridge    local
bd470f8620fd   none                  null      local

于是创建了integration_default网络。如果我检查这个网络

代码语言:javascript
复制
docker network inspect integration_default
[
    {
        "Name": "integration_default",
        "Id": "48572c69755ae1bbc1448ab203a01d81be4300da12c97a9c4f1142872b878387",
        "Created": "2022-09-28T00:48:20.504251612Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.27.0.0/16",
                    "Gateway": "172.27.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "79e897decb4f0ae5836c018d82e78997e8ac2f615b399362a307cc7f585c0875": {
                "Name": "integration-test-mysql-host",
                "EndpointID": "1f7798554029cc2d07f7ba44d057c489b678eac918f7916029798b42585eda41",
                "MacAddress": "02:42:ac:1b:00:02",
                "IPv4Address": "172.27.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "integration",
            "com.docker.compose.version": "2.7.0"
        }
    }
]

将其与默认桥进行比较。

代码语言:javascript
复制
docker inspect bridge

[
    {
        "Name": "bridge",
        "Id": "42a11ef835dd1b2aec3ecea57211bb2753e0ebd4a2a115ace8b7df3075e97d5a",
        "Created": "2022-09-27T21:54:44.239215269Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

有趣的是,在我的Linux机器上运行ping 172.17.0.1很好,但是ping 172.27.0.1没有返回任何东西。

更新我已经开始工作了。通过在我的停靠器撰写文件中指定network_mode: bridge,我能够使用默认的桥网络,正如我前面提到的,它可以在我的本地机器上访问。

然而,我想知道为什么创建我自己的网络在这里行不通。有人知道为什么会这样吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-28 03:14:35

码头网络应该被隐藏起来,除非有很好的理由,否则你应该让码头商做好它的工作。

与服务交互的正确方法是通过其开放的端口。这些端口被映射到主机上,以便与主机对话:端口就像与容器中的应用程序对话一样。

所以,当你说你不能从主机上打开你的容器时,那是因为Docker做的很好。“修复”打破了容器的隔离,并使其可用于其他不应该访问容器的服务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73875156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档