如何配置一个网络中的容器相互连接(服务器 -> mysql)?

2024-02-08

我已经在 Windows 上运行了 ubuntu docker-containers (mysql) 和 (nodejs server app)

docker run -d --网桥 --name own -p 80:3000 own:latest

docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345678 mysql:5

码头工人

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
3ce966e43414        own:latest          "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        0.0.0.0:80->3000/tcp                own
ed10cfc93dd5        mysql:5             "docker-entrypoint.s…"   20 minutes ago      Up 20 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

当我仅通过 cmd (而不是通过 docker VM)使用服务器应用程序打开端口 localhost:3000 时,一切都很好,我看到成功连接到 docker-container 0.0.0.0:3306,但是当我:

docker启动自己的

检查浏览器 0.0.0.0:80,我看到错误:连接 ECONNREFUSED 127.0.0.1:3306

docker 网络 ls

NETWORK ID          NAME                DRIVER              SCOPE
019f0886d253        bridge              bridge              local
fa1842bad14c        host                host                local
85e7d1e38e14        none                null                local

码头工人检查桥

[
{
    "Name": "bridge",
    "Id": "019f0886d253091c1367863e38a199fe9b539a72ddb7575b26f40d0d1b1f78dc",
    "Created": "2019-11-19T09:15:53.2096944Z",
    "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": {
        "a79ec12c4cc908326c54abc2b47f80ffa3da31c5e735bf5ff2755f23b9d562dd": {
            "Name": "own",
            "EndpointID": "2afc225e29138ff9f1da0f557e9f7659d3c4ccaeb5bfaa578df88a672dac003f",
            "MacAddress": "02:42:ac:11:00:02",
            "IPv4Address": "172.17.0.2/16",
            "IPv6Address": ""
        },
        "ed10cfc93dd5eda7cfb8a26e5e4b2a8ccb4e9db7a4957b3d1048cb93f5137fd4": {
            "Name": "mysql",
            "EndpointID": "ea23d009f959d954269c0554cecf37d01f8fe71481965077f1372df27f05208a",
            "MacAddress": "02:42:ac:11:00:03",
            "IPv4Address": "172.17.0.3/16",
            "IPv6Address": ""
        }
    },
    "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": {}
}
]

也许我可以以某种方式将自己的容器分配给像mysql这样的桥接网络。在 mysql 容器的 localhost 之后将看到自己的容器?请帮忙我该怎么办?


#create network mynetwork
docker network create --subnet 172.17.0.0/16 mynetwork

#create own container (without starting it)
docker create -d --name own -p 80:3000 own:latest

#add own container to the network mynetwork
docker network connect --ip 172.17.0.2 mynetwork own

#start container own
docker start own

#same as above but with different ip
docker create -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345678 mysql:5
docker network connect --ip 172.17.0.3 mynetwork mysql
docker start mysql

当您停止并删除容器时,您可以通过以下方式删除网络:

docker network rm mynetwork

或者,如果您不这样做,则无需像上面那样再次创建它,只需将新的/其他容器连接到它即可。

在您的应用程序中您应该使用172.17.0.3作为 MySQL 地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何配置一个网络中的容器相互连接(服务器 -> mysql)? 的相关文章

随机推荐