spring-boot - 无法连接到 docker 容器 localhost 连接被拒绝
问题描述
对码头工人来说非常新。按照本教程:https ://medium.com/thecodefountain/develop-a-spring-boot-and-mysql-application-and-run-in-docker-end-to-end-15b7cdf3a2ba
我遵循了所有说明(我的应用程序被称为accessing-data-mysql
),但我认为我应该运行两个容器:一个用于 mysql,一个用于应用程序。但是在运行时,docker container ls
我只看到列出的 mysql 容器。下面我为我的应用程序图像创建一个 docker 容器,并将其链接到正在运行的 mysql 容器实例。
PS C:\projects\project1> docker run -d -p 8089:8089 --name accessing-data-mysql --link mysql-standalone:mysql accessing-data-mysql
82f499c6897d1f6bd2eeaabe4aa25ae786508146929a7039785e4ca37d691435
PS C:\projects\project1> docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
62029a53b9d4 mysql "docker-entrypoint.s…" 16 minutes ago Up 16 minutes 3306/tcp, 33060/tcp mysql-standalone
PS C:\projects\project1> docker run -d -p 8089:8089 --name accessing-data-mysql --link mysql-standalone:mysql accessing-data-mysql
我的码头文件:
FROM openjdk:12
ADD target/user-mysql.jar user-mysql.jar
EXPOSE 8089
ENTRYPOINT ["java", "-jar", "user-mysql.jar"]
通过浏览器连接到 localhost:8089 时,出现连接被拒绝错误。甚至不确定该服务是否正在运行。
下面是运行 docker logs 的结果:
PS C:\projects\project1> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82f499c6897d accessing-data-mysql "java -jar accessing…" 50 minutes ago Exited (0) 50 minutes ago accessing-data-mysql
62029a53b9d4 mysql "docker-entrypoint.s…" About an hour ago Up About an hour 3306/tcp, 33060/tcp mysql-standalone
PS C:\projects\project1> docker logs accessing-data-mysql
Hibernate ORM core version 5.4.27.Final
PS C:\projects\project1>
编辑:当我直接从 Idea 在本地运行时,我看到了错误:No such host is known (mysql-standalone),这是我配置为连接到 docker mysql 的 mysql url。只要我将 mysql url 更改为 localhost:3306,它就可以连接。这是否意味着 my-sql docker 实例不接受连接?
解决方案
您的容器未启动并运行。当您这样做时,您需要看到容器已启动docker ps
。您应该看到如下内容:
~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
62029a53b9d4 mysql "docker-entrypoint.s…" 16 minutes ago Up 16 minutes 3306/tcp, 33060/tcp mysql-standalone
XXXXXXXXXXXX openjdk "java" XX minutes ago Up xx minutes 8089/tcp accessing-data-mysql
如果您看不到第二个容器,则表示它没有运行。您需要通过获取日志来查找未运行的原因,docker logs accessing-data-mysql
并查看第二个容器未启动的原因。
另外,考虑docker-compose
为这两个容器创建一个并建立一个单独的网络。这不是必需的,您的示例可以在没有它的情况下工作,但它使管理和故障排除变得更加容易。
推荐阅读
- java - Java 网站:使用 RequestDispatcher 发送 POST 数据
- google-apps-script - 将电子表格复制到 GDrive 中的特定文件夹中
- laravel - 雄辩的如何在父表值不变的情况下更新子表值
- php - Wordpress 如何存储已登录的用户?
- node.js - msteams 传出 webhook 的 IP 白名单
- node.js - zip 警告:压缩目录时缺少结束签名
- mysql - MySQL 工作台:如何将特定列导出为更新语句?
- javascript - 一旦前一个被循环,如何循环遍历一个数组?
- database - 如何获取 sqflite Flutter 数据库的正确路径?
- linux - 如何通过 Linux 命令“grep”获取值