【问题标题】:can't connect to docker container localhost connection refused无法连接到 docker 容器 localhost 连接被拒绝
【发布时间】:2021-06-11 04:43:22
【问题描述】:

对 docker 很陌生。跟随本教程: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

我的 docker 文件:

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 -a 检查所有的容器,然后用 docker logs yourcontainername 检查你的应用容器,看看为什么启动失败?
  • 另外,--link- 不应该再使用了,你应该创建一个 docker 网络。一旦我们可以获得有关容器故障的更多详细信息,我将在答案中进行更多解释:)
  • @Faeeria 我已经添加了日志
  • 当您在本地启动应用程序时,您会从应用程序中获得更多日志吗?
  • @Faeeria 我回复了最新的编辑。

标签: spring-boot docker


【解决方案1】:

您的容器未启动并运行。当您执行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 并建立一个单独的网络。这不是必需的,您的示例可以在没有它的情况下工作,但它使管理和故障排除变得更加容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多