【问题标题】:Docker: Access mysql in docker container using --net=host option from hostDocker:使用主机中的 --net=host 选项访问 docker 容器中的 mysql
【发布时间】:2016-07-29 09:01:50
【问题描述】:

我正在运行 2 个带有 --net=host 选项的 docker 容器,因此网络是透明的(docker 容器使用与主机相同的网络设备)。

    docker network inspect host
[
    {
        "Name": "host",
        "Id": "32ddf8f58d520e49a0b3f296d6d03134b24d7c503309e1c35e04c248010aa64b",
        "Scope": "local",
        "Driver": "host",
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": []
        },
        "Containers": {
            "0e41eb0b07d2751db99a204a3a69a2446bf5b869150bc5741df670e56dbce670": {
                "Name": "sleepy_goldstine",
                "EndpointID": "cc8f2c4da055ae7e608c127552f67753c319aeb603234c418a0ebe8958c1025a",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            },
            "71de826121e7222020eec8be8b3a737f3297f8c3aa99d21f0f7016d6aca6f668": {
                "Name": "tender_goodall",
                "EndpointID": "2da0468dbaf1e6b877984cbeb6b2a775786259fec7e83eb373c1d25fe715e16f",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]

我可以从外部访问 docker 容器中的多项服务。但是,有一件事不起作用,我开始用剪刀在上面跑......

在 docker 主机上有一个 mysql 数据库在端口 3306 上运行。没有问题。

Docker 容器 1 的 mysqld 也在 3307 端口上运行,而 Docker 容器 2 的 mysqld 也在 3308 端口上运行

然而,使用

mysql -P 3307 -u 用户 -p 数据库名

我无法从主机访问 mysql 数据库。即使我为在第一个 docker 实例中运行的 mysql 提供端口,它也总是将我定向到主机上的 mysql 数据库。没有可能导致此类行为的 iptables 规则。关闭防火墙不会改变行为。

在 my.cnf 中绑定 0.0.0.0 (127.0.0.1) 的 mysql 服务器也不行。

所以我迷路了,希望有人能找到解决方案。删除 --host=net 选项并使用端口暴露不是一个选项,因为这会降低容器的网络性能。

编辑:忘了提到 docker 容器中的数据库可以访问并按设计工作。唯一不起作用的是来自主机 -> docker 的连接,因为即使使用来自 docker 容器的端口,连接也将始终指向主机 -> 主机。

【问题讨论】:

    标签: mysql docker


    【解决方案1】:

    我猜这与 Docker 网络无关。 MySQL 客户端只是倾向于在 MySQL 服务器公开的主机上使用 Unix 套接字。只需向客户端提供主机 IP 地址-h 127.0.0.1,即可强制其使用 TCP。

    【讨论】:

    • 你是我的英雄!解决了!
    • @Blacksheep 我很高兴它有帮助 :-) 我多次遇到这个问题,通过 SSH 隧道将 MySQL 端口连接到 localhost,并且一直想知道为什么这该死的东西不起作用。请注意,如果您提供localhost,它将不起作用。这是a question,关于如何配置 MySQL 客户端以更符合预期的方式运行。这是一个相关的MySQL bug
    猜你喜欢
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2020-07-17
    • 2017-11-30
    • 2019-08-08
    • 1970-01-01
    相关资源
    最近更新 更多