在Docker容器中将tomcat连接到mysql时遇到问题?
我有2个通过docker-swarm创建的docker服务。在Docker容器中将tomcat连接到mysql时遇到问题?
一个是Tomcat,另一个是mysql,我试图从tomcat连接到mysql都在不同的容器中。
这里是我的hibernate.cfg.xml
在tomcat容器中。
<property name="connection.url">
jdbc:mysql://localhost:3306/travelbiz
</property>
<property name="connection.username">trvlbz_admin</property>
<property name="connection.password">admin123</property>
,这里是在服务上运行
[email protected]:/home/smadmin# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ecb386d9bbc cloudesire/[email protected]:19e24a2290e4c3253a44d65243a54c520e9f8e0fe0edf3a5221ccc67cf9da0f8 "/run.sh" 7 hours ago Up 7 hours 8080/tcp apache.2.1ftla1ohbnjgax7ibk8fbh5hz
4e940f3be18d vishnuranganathan/[email protected]:4460004d01c9a23d4c80ea2a9d7a69fc1495cbe01b48555cf28bd73a535176d1 "/usr/bin/mysqld_safe" 7 hours ago Up 7 hours 3306/tcp mysql.1.hjoba4bsrl8lujfumc6qru3uq
我得到通过tomcat.can有人帮助我在此试图访问时,MySQL连接拒绝异常?
你不想使用mysql容器的ip地址,因为这将会改变下一次启动一个新的mysql容器或者如果你碰巧缩放它(尽管mysql可能并不容易)。你应该使用的是容器的名称。当您调出容器时,您将使用docker run
,请务必添加--name mysql
,然后使用mysql
代替IP地址。
是的我同意你点Anoop。我使用Swarm来启动容器,而不是docker run命令。 当我使用Docker-swarm时,可以使用服务名称而不是容器名称吗? –
是的,绝对。使用服务名称非常有用,因为您可能会扩展服务以拥有多个副本。您希望单个服务名称可以覆盖您可能拥有的多个副本。 – Anoop
你是否检查容器中的mysql配置是否允许外部连接?它将在my.cnf文件中,配置是'bind_address 0.0.0.0'或者只是将其删除。 –
@JorgeCampos是啊,我更改为0.0.0.0仍然相同的问题, 在Tomcat容器hibernate.cfg.xml中: JDBC:MySQL的://本地主机:3306/travelbiz 它应该是localhost(或)host-ip(或)mysql-container-id? –
'localhost'那就是你的问题了。它应该是mysql容器的IP地址,而不是localhost。 –