📜  docker 错误:传输错误 202:gethostbyname:未知主机 spring_boot_com_mysql_1 |错误:JDWP 传输 dt_socket 初始化失败,TRANSPORT_INIT(510) (1)

📅  最后修改于: 2023-12-03 15:14:46.472000             🧑  作者: Mango

Docker 错误解决:传输错误 202 & JDWP传输失败

问题描述

在使用 Docker 运行 Spring Boot 应用程序时,可能会遇到以下两个错误:

  1. gethostbyname: unknown host,一般出现在应用程序使用 MySQL 等其他服务时;
  2. JDWP transport dt_socket failed to initialize, TRANSPORT_INIT(510),一般出现在使用 IDEA 或 Eclipse 等 IDE 进行 Debug 时。

这两个错误都属于传输错误,会导致应用程序无法正常运行或 Debug。

解决方法
传输错误 202:gethostbyname:未知主机

这个错误通常是因为 Docker 容器无法访问主机网络导致的。解决方法有以下两种:

方法一:使用 --network=host 参数

在启动 Docker 容器时添加 --network=host 参数,可以让容器与主机共享网络。

$ docker run --network=host my-spring-boot-app

方法二:使用 Docker DNS 代理

在 Docker 容器中使用 Docker DNS 代理,让容器能够使用本地 DNS 解析器来解析主机名。

$ docker run --dns=172.17.4.251 my-spring-boot-app

其中 172.17.4.251 是本地 DNS 解析器的 IP 地址,可以通过 cat /etc/resolv.conf 命令查看。

JDWP 传输 dt_socket 初始化失败, TRANSPORT_INIT(510)

这个错误一般是因为 Docker 容器的网络配置导致的。解决方法有以下两种:

方法一:使用 --network=host 参数

在启动 Docker 容器时添加 --network=host 参数,可以让容器与主机共享网络。

$ docker run --network=host my-spring-boot-app

方法二:使用 --expose 参数

在启动 Docker 容器时添加 --expose 参数,可以将容器的端口暴露给主机,从而实现容器与主机的通信。

$ docker run --expose=8080 my-spring-boot-app

其中 8080 是容器的端口号。