代码之家  ›  专栏  ›  技术社区  ›  laxantsu

Docker Swarm覆盖网络上的端口转发

  •  0
  • laxantsu  · 技术社区  · 7 年前

    我有一个flask和一个mysql服务在覆盖网络下运行,每个都发布一个端口(分别为8080和3306)。这是对 my-network

    "Containers": {
                "4698a46d9748b802c74d3eb3cd47c76b9c8ff9fb2aa954338be3ec0ca6fba028": {
                    "Name": "mysql-app.1.bfoy8mz5ts9mb7jmuyaqy1ytu",
                    "EndpointID": "4c229598a84bc2a3488c24cf15f870bbaa7c48a9b67801558bc9c6382f0f8445",
                    "MacAddress": "02:42:0a:00:00:03",
                    "IPv4Address": "10.0.0.3/24",
                    "IPv6Address": ""
                },
                "4ca9811fe4e04d4ec9a8b0d887b7d971c7d6251e08702729487c2de531dc582f": {
                    "Name": "flask-app.1.56j825gcgfrfvv2vkj6e65seu",
                    "EndpointID": "260568e4f00aa596ed1fd2b68c51eaf9827d602f54d9d0573d6fcd1da038e899",
                    "MacAddress": "02:42:0a:00:00:06",
                    "IPv4Address": "10.0.0.6/24",
                    "IPv6Address": ""
                }
            },
    

    我可以使用Flask连接到MySQL 10.0.0.3 。这不是保证的IP地址,无法手动设置。我希望有一种方法可以连接到MySQL,而不必首先检查其IP。

    下面是创建服务的当前命令: docker service create -p 3306:3306 --network my-network --replicas 2 -e MYSQL_ROOT_PASSWORD=password --name mysql-app mysql 。我的假设是将端口发布到3306会将其转发到 我的网络 我可以连接到 我的网络 的网关。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Markus    7 年前

    DNSRR是docker swarm模式的一个关键概念: https://docs.docker.com/engine/swarm/key-concepts/#load-balancing

    因为您正在使用部署MySQL服务 --name mysql-app 并分配 flask-app 在同一网络中 --network my-network ,这两个服务可以通过名称相互联系。不需要计算IP地址。

    尝试

    # create a test network
    docker network create testnetwork
    
    # start mariadb
    docker run -d --name bettermysql --network testnetwork -e MYSQL_ROOT_PASSWORD=nomysql mariadb:latest
    
    # start some other linux and ping mariadb by name
    docker run -ti --network testnetwork alpine:3.7 /bin/sh
    / # ping bettermysql
    PING bettermysql (172.19.0.2): 56 data bytes
    64 bytes from 172.19.0.2: seq=0 ttl=64 time=1.661 ms
    ...
    

    当您在swarm模式下开发时,您希望使用 --attachable 您的 docker network create 命令您可以使用普通docker容器访问覆盖网络( docker run ... )用于测试和调试。

    TL;DR公司

    使用 mysql-app MYSQL_HOST 在您的 烧瓶应用程序 配置。