我有一个war文件,它在后端使用MySQL数据库。我已经将我的war文件部署在一个码头容器中,并且我能够在我的浏览器中点击这个文件。我想把我的应用程序和MySQL数据库连接起来。这个数据库存在于我的主机的localhost:3306上
由于我无法从容器的本地主机连接这个地址,我尝试的是运行一个命令docker inspect --format '{{ .NetworkSettings.IPAddress }}' 213be777a837 --这个命令给了我一个IP地址172.17.0.2。我转到MySQL服务器选项,并将这个IP地址放在绑定字段中,然后重新启动服务器。之后,我用172.17.0.2:3306更新了项目数据库连接字符串。
但这是行不通的。谁能告诉我错过了什么吗?我还尝试使用root@%添加一个新的DB用户,然后运行命令,允许对“root@%”的所有权限,但都没有效果。
发布于 2020-04-17 07:24:21
按照以下步骤:-
docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 dockernet
docker run -p 8082:8080 --network dockernet -d 6ab907c973d2
in your project set connection string : jdbc:mysql://host.docker.internal:3306/....然后部署。
发布于 2020-04-17 05:06:02
tl;dr:如果您在Linux上,可以使用172.17.0.1:3306。
更长的描述:
正如我所理解的,您需要做的是从您的Docker容器连接到主机端口。但是,您所做的是尝试将主机进程(MySQL)绑定到容器网络接口。不确定试图绑定到另一个主机进程网络命名空间的主机进程意味着什么,但是IIUC您的MySQL进程不应该绑定到该地址。
使用绑定到MySQL的默认设置启动0.0.0.0时,可以通过Docker虚拟桥对Docker容器使用。因此,您应该做的是通过虚拟桥将请求从WAR进程路由到主机进程(如果这是您正在使用的网络模式的话)。如果您没有更改任何Docker网络设置,则应该更改)。这是通过将桥网关地址指定为MySQL地址和启动端口来完成的。
您可以通过检查网络接口获得网桥IP地址。安装Docker时,默认情况下它会配置虚拟桥,如果您在Linux上,它应该会显示为docker0。它的IP地址很可能是172.17.0.1。因此,从容器的角度来看,您的MySQL地址是jdbc:mysql://172.17.0.1:3306/...。

发布于 2020-11-24 04:15:18
从您的问题中,我假设您的war file和MySQL都部署在本地,您希望将它们连接起来。允许本地部署的两个容器相互通信的一种方法是:
创建您自己的网络docker network create <network-name>
然后,当您运行
MySQL时,使用--网络来部署它们。例如- War File: `docker run --name war-file --network <network-name> <war file image>`
- MySQL: `docker run --name mysql --network <network-name> <MySQL image>`mysql:3306连接到您的MySQL,因为它们都位于相同的自定义网络上。如果您想阅读更多有关这方面的内容,可以查看网络上的docker文档。(https://docs.docker.com/network/bridge/)。
https://stackoverflow.com/questions/61263439
复制相似问题