mysql - Docker:使用来自主机的--net = host选项访问docker容器中的mysql

标签 mysql docker

我正在运行 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中mysql server is bound to 0.0.0.0 (127.0.0.1) 也不起作用。

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

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

最佳答案

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

关于mysql - Docker:使用来自主机的--net = host选项访问docker容器中的mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36493824/

相关文章:

php - 我可以在prepare()函数中连接字符串以插入到指定的表中吗

docker - 如何列出远程注册表上 Docker 镜像的所有标签?

php - Symfony 2 BlueImp OneupUploaderBundle sql 错误 PostPersistEvent 不工作

java - Hibernate 中的分布式查询缓存

javascript - 带有 MySQL 的 jQuery 和 PHP 中的价格范围 slider

multithreading - 如何确保两个 docker 容器不处理同一个文件?

java - Spring Security 在本地主机上工作,但在服务器上的 docker 中给出 '403 Forbidden'

mysql - 如何使用 Xampp shell 将 CSV 文件插入 Mysql

docker - 如何让 gcloud.auth.docker-helper 摆脱挂入非相关 docker 构建的习惯?

docker - 使用 docker-compose 向主机目录添加权限