无法将MySQL容器连接到docker中的Tomcat容器

时间:2016-02-19 17:12:26

标签: mysql docker docker-compose

计划

我希望我的tomcat服务器能够在不同的容器中连接到我的MySQL服务器。

问题

Tomcat无法连接到MySQL

我使用wordpress tutorial中有关设置与mysql容器的链接的一些细节,并创建了指向MySQL的链接。

虽然tomcat和mysql旋转得很好但我似乎无法让tomcat能够连接到MySQL,但我的本地机器上的设置工作非常好。

我也试图使用--net: "host",尽管这不适用于Tomcat,因为它会引发严重错误。

以前的答案

noticed on this post a load可能修复了错误,但我不相信其中的任何内容都会转化为我的问题,因为我认为这是一个码头工人问题而非主持人问题。

搬运工-compose.yml

web:
  image: tomcat:7.0
  container_name: tomcat-container
  ports:
   - "80:8080"
  hostname: docker-tomcat
  volumes:
   - /home/webapps:/usr/local/tomcat/webapps
  links:
   - db
db:
  image: mysql
  container_name: mysql-container
  environment:
   MYSQL_ROOT_PASSWORD: Mysqlpassword1
   MYSQL_DATABASE: tracker
  volumes:
   - /home/mysqlDB:/var/lib/mysql

这是我的Context.xml from tomcat.

<Context>
    <Resource
        name="jdbc/tracker" type="javax.sql.DataSource"
        maxActive="100" maxIdle="30" maxWait="10000" 
        url="jdbc:mysql://localhost:3306/tracker?useSSL=false"
        driverClassName="com.mysql.jdbc.Driver"
        username="root" password="mysqladmin1"
    />
    <Resource
        name="jdbc/jenkins" type="javax.sql.DataSource"
        maxActive="100" maxIdle="30" maxWait="10000" 
        url="jdbc:mysql://localhost:3306/jenkins?useSSL=false"
        driverClassName="com.mysql.jdbc.Driver"
        username="root" password="mysqladmin1"
    />
</Context>

错误代码。

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at databaseConnections.SQLDatabaseConnection.tableExists(SQLDatabaseConnection.java:131)
at databaseConnections.JiraSQLDatabaseConnection.<init>(JiraSQLDatabaseConnection.java:50)

2 个答案:

答案 0 :(得分:6)

由于您将db链接为“db”,因此无法使用localhost加入数据库。你应该“db”

jdbc:mysql://db:3306/tracker?useSSL=false

在您的容器中,localhost设计您的tomcat容器,而不是您的主机。 MySQL容器有自己的网络。

此外,如果您不喜欢“db”名称,可以使用其他名称命名链接

例如:

 links:
   - db:container-mysql

在这种情况下,在tomcat容器中,你可以使用

jdbc:mysql://container-mysql:3306/tracker?useSSL=false

答案 1 :(得分:1)

如果您正在使用已经运行或使用单独的DockerFile运行的容器,那么您可能需要考虑使用

external_links:
  -  mysql-container:db

请注意,名称mysql-container是容器的名称。如果您不知道docker-compose.yml中指定的名称或避风港,您也可以通过

找到它。
docker ps

NAMES的列是您在外部链接中需要的列。 db之后的:只是一个别名,它可能是您想要的任何内容。它将是您的主机名。例如,如果在将数据库停靠到主机为localhost之前,您必须将其更改为db

最后,您还必须确保两个容器都在同一网络中运行。您可以通过创建新网络来实现:

docker network create --driver=bridge my-network

然后在两个容器的docker-compose.yml内,在与service

相同的缩进级别添加以下网络配置
networks:
  default:
    external:
      name: my-network