spring引导到mysqldocker通信

我创build了一个spring boot应用程序。 当我在Eclipse中运行应用程序时,我可以从浏览器中打开我的服务并获得我想要的响应。

我正在build造这个容器:

 FROM java:8-jre VOLUME /tmp RUN mkdir -p /conf COPY application.properties /conf/application.properties ADD target/chrisbolton_service-1.0.0.jar app.jar RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.config.location=file:/conf/application.properties"] 

我开始使用这个我的spring boot应用程序

docker run -it --name chrisbolton_service --link chrisbolton:mysql -p 8080:8080 chrisbolton_service

另外,我有mysql运行。 从docker ps你可以看到,

bcb0a900b693 mysql:latest "docker-entrypoint..." 6 hours ago Up 3 hours 0.0.0.0:3306->3306/tcp chrisbolton

我读过 ,我需要链接我的容器。 但是,当我打我的端点localhost:8080/blogs我越来越

 2017-08-29 20:20:37.516 ERROR 1 --- [nio-8080-exec-1] oatomcat.jdbc.pool.ConnectionPool : Unable to create initial connections of pool. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

更新:

从评论中的build议,我创build了一个docker network ,我在docker network运行mysql和我的spring boot应用程序。 仍然得到与上面相同的错误。

这是我的docker network inspect

$ docker network inspect chrisbolton [ { "Name": "chrisbolton", "Id": "394e6e207ab53967f6f15e9498c95e5b25f3827ad865cc3c21873c7de2e25465", "Created": "2017-08-29T20:37:11.136108745Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "1556dae62334250b20220b05dc18365d65e498c66a47d0db4b8e7e61de8d3496": { "Name": "chrisbolton_service", "EndpointID": "4ce1a129277a0c27b07be796c4b2fa18604f19764e28124729af2479da0cd58c", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" }, "6d7faf5f43722667bdd9080a41f56d9934574900aec1be96118d9683b99f846e": { "Name": "chrisbolton", "EndpointID": "312b00c24979fdf5bad50377cf64eeec29bbdcbbf5221b981693886ae53ef490", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]

每个容器都在自己的networking命名空间中运行。 容器中的本地主机与主机上的本地主机不同。 将容器连接到容器:

  1. 创build一个公共networking,例如docker network create myapp
  2. 使用名称创build容器并将其连接到networking,例如: docker run --network myapp --name mysql mysql用于数据库的docker run --network myapp --name mysql mysql 。 请注意,不需要在主机上发布端口,也不必在Dockerfile中公开端口,以便容器到容器networking正常工作。
  3. 服务(数据库,networking服务器等)必须在所有接口上监听,而不是在本地主机上监听。 这个语法是0.0.0.0 ,表示你想要监听所有的接口。
  4. 在您的应用程序中,使用docker的内置DNS连接到另一个容器的名称,例如mysql:3306 。 不要连接到本地主机(它不会工作)或发布的端口(你直接对话的容器)。