【问题标题】:Docker error container-to-container through bridge: "dial tcp 0.0.0.0:3306: connect: connection refused"Docker错误容器到容器通过桥:“拨号tcp 0.0.0.0:3306:连接:连接被拒绝”
【发布时间】:2022-07-21 22:11:55
【问题描述】:

这是我的 docker-compose.yml:

version: '3.9'

services:
  me: 
    tty: true
    image: alpine:latest
    container_name: me
    restart: always
    volumes: 
      - ./misc/:/tmp/
    environment:
      - ME_IPADDR=mdb
      - ME_PORT=3306
    entrypoint: 
      - "/tmp/entrypoint.sh"
    depends_on:
      - mdb
    ports:
      - "80:8080"

  mdb:
    image: mariadb:latest
    container_name: mdb
    volumes:
      - ~/.local/mariadb:/var/lib/mysql
    environment:
      - MYSQL_PASSWORD=password
      - MYSQL_USER=osousa
      - MYSQL_DATABASE=osousa
    restart: always

networks:
  default:
    name: mego
    external: true

两个容器通过同一个网络连接:

$ docker network inspect -f '{{range .Containers}}{{.Name}} {{end}}' mego
$ mdb mariadb

他们正在互相交谈:

$ docker exec e7bcfa16d3e4 ping 8f5d5ac038ba -c2
PING 8f5d5ac038ba (172.21.0.2): 56 data bytes
64 bytes from 172.21.0.2: seq=0 ttl=64 time=0.087 ms
64 bytes from 172.21.0.2: seq=1 ttl=64 time=0.145 ms

--- 8f5d5ac038ba ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.087/0.116/0.145 ms

但是当应用程序的容器 [我] 向数据库发出请求时,我总是会收到错误消息。这是我从 mariadb 得到的错误:

me     | 2022/07/21 13:51:57 Error occured: error:dial tcp 0.0.0.0:3306: connect: connection refused

为了确定问题是否来自 mariadb,我在 yml 的 mariadb 服务中添加了以下内容:

ports:
 - "3306:3306"

我在 UFW 中添加了以下规则:

ufw route allow proto tcp from any to any port 3306

我能够使用“我”容器内的相同程序和相同的登录凭据从远程计算机完美地连接到 mariadb 数据库。 这不是容器或数据库的问题。

我还应该尝试什么?

非常感谢您的帮助!

【问题讨论】:

  • 您似乎错误地将数据库连接配置为使用特殊的 0.0.0.0“无处不在”地址作为数据库位置。在 Compose 上下文中,您应该能够使用 Compose 服务名称 mdb 作为主机名;有关详细信息,请参阅 Docker 文档中的 Networking in Compose
  • @DavidMaze 有趣的是,使用 0.0.0.0:3306 将服务器绑定到所有可用接口的 mariadb docker 映像(我认为这应该不是问题)。我不知道如何让它绑定到容器自己的 IP。

标签: docker docker-compose docker-networking


【解决方案1】:

我不能说,我从哪里得到 mdb 的 ip。但是,我尝试了错误的 ip。

me | 2022/07/21 13:51:57 Error occured: error:dial tcp 0.0.0.0:3306: connect: connection refused

0.0.0.0:3306 表示,它尝试使用 ip 0.0.0.0。这是错误的。我认为这是我的配置错误。

【讨论】:

  • 服务器绑定到 0.0.0.0,这意味着它将从所有可用的接口监听。这应该不是问题。
猜你喜欢
  • 2020-12-31
  • 1970-01-01
  • 2019-12-12
  • 2019-03-01
  • 2018-12-26
  • 2019-12-25
  • 2022-01-26
  • 2021-02-03
  • 1970-01-01
相关资源
最近更新 更多