【发布时间】:2019-04-01 17:52:18
【问题描述】:
我已经使用 docker 工具箱在 Windows 机器上安装了 docker。 我还在我的 Windows 机器上安装了 mysql,并且服务器在端口 3306 上运行(localhost - 127.0.0.1 - 在 docker 机器之外) 我在名为“micra-network”的docker网络中运行名为“micra-workq-svc”的docker容器内的sprint启动应用程序 我希望在 docker 内运行的应用程序连接到这个本地主机。 我花了几个小时在谷歌上搜索,但没有一个链接可以帮助我解决这个问题。 我尝试使用以下命令运行 mysql 映像:
docker run --name micra-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<pass> -e MYSQL_DATABASE=<db name> -e MYSQL_USER=<roo user> -e MYSQL_PASSWORD=<root password >--net=micra-network mysql:latest
我正在使用以下命令来运行我的容器:
docker run -e "SPRING_PROFILES_ACTIVE=dev" --network micra-network --env "eureka.client.enabled=true" --env "eureka.host=micra-eureka-server" --env "eureka.instance.preferIpAddress: true" --env "eureka.client.serviceUrl.defaultZone=http://micra-eureka-server:8761/eureka" --env DATABASE_HOST=127.0.0.1 --env DATABASE_PORT=3306 --env DATABASE_NAME=<db name> --env DATABASE_USER=<db user> --env DATABASE_PASSWORD=<db password> --expose 8083 -p 8083:8083 --name micra-workq-svc --link micra-mysql -t <my docker service image>
这是 application.properties 在 Spring Boot 中的样子:
spring:
datasource:
password: ${DATABASE_PASSWORD}
url: jdbc:mysql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}
username: ${DATABASE_USER}
当我运行我的服务时,出现以下错误:
Failed to obtain JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
我的docker机器ip是192.168.99.100.
【问题讨论】:
-
用你机器的ip试试(192.168.xxx.xxx),你还需要更新你的mysql conf,绑定地址0.0.0.0
-
@Bughunter - 不,它不起作用。我将环境属性 DATABASE_HOST 更改为 192.168.99.100(我的 docker 机器 ip)。
-
如果您在容器中同时运行 Java 和 DB,则可以通过它们的名称访问它们。本地主机不会工作,因为它是相对于容器而言的。
-
@Arman - 我尝试使用上述命令在容器内运行 mysql,并将 DATABASE_HOST 更改为容器名称“micra-mysql”,但出现未知主机异常。另请注意,应用程序正在 docker 网络 'mira-network' 中运行。
-
在第二个视图中,在您的第一个运行命令中,您使用了“--net=micra-network”,在第二个视图中使用了“--network micra-network”。确定他们在同一个网络上吗?使用 docker-compose 首先摆脱了这些问题,但似乎并不能解决您的用例。
标签: mysql docker spring-boot