2017-06-01 109 views
1

我有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连接拒绝异常?

+0

你是否检查容器中的mysql配置是否允许外部连接?它将在my.cnf文件中,配置是'bind_address 0.0.0.0'或者只是将其删除。 –

+0

@JorgeCampos是啊,我更改为0.0.0.0仍然相同的问题, 在Tomcat容器hibernate.cfg.xml中: <属性名= “connection.url”> JDBC:MySQL的://本地主机:3306/travelbiz 它应该是localhost(或)host-ip(或)mysql-container-id? –

+1

'localhost'那就是你的问题了。它应该是mysql容器的IP地址,而不是localhost。 –

回答

1

你不想使用mysql容器的ip地址,因为这将会改变下一次启动一个新的mysql容器或者如果你碰巧缩放它(尽管mysql可能并不容易)。你应该使用的是容器的名称。当您调出容器时,您将使用docker run,请务必添加--name mysql,然后使用mysql代替IP地址。

+0

是的我同意你点Anoop。我使用Swarm来启动容器,而不是docker run命令。 当我使用Docker-swarm时,可以使用服务名称而不是容器名称吗? –

+1

是的,绝对。使用服务名称非常有用,因为您可能会扩展服务以拥有多个副本。您希望单个服务名称可以覆盖您可能拥有的多个副本。 – Anoop

相关问题