【发布时间】:2018-02-07 10:09:27
【问题描述】:
我创建了一个spring boot 应用程序。当我在 Eclipse 中运行应用程序时,我可以从浏览器访问我的服务并获得我想要的响应。
我正在构建这个容器:
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
我有 read 我需要链接我的容器。但是,当我到达终点localhost:8080/blogs 时,我得到了
2017-08-29 20:20:37.516 ERROR 1 --- [nio-8080-exec-1] o.a.tomcat.jdbc.pool.ConnectionPool : Unable to create initial connections of pool.
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
更新:
根据 cmets 中的建议,我创建了一个 docker network,并在网络中同时运行 mysql 和我的 spring boot 应用程序。仍然出现与上述相同的错误。
这是我的inspectdocker network
$ 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": {}
}
]
【问题讨论】:
-
我建议使用 docker 网络而不是链接。链接被视为已弃用。
-
那么这是创建一个网络然后在同一个网络上运行两个容器吗?
-
没错。鉴于上述编辑,您的 Spring Boot 应用程序试图连接到 mysql 的是什么?您使用的主机名/IP 是什么?
-
mysql 实例正在
localhost:3306上运行。我正在尝试连接和查询表。所以在我的弹簧属性中,我连接到localhost:3306/chrisbolton。在我将其容器化之前,这是可行的。
标签: java mysql docker spring-boot