首页 > 解决方案 > Docker-Compose 服务不通信

问题描述

码头工人新手警报。希望这不是一个愚蠢的问题,但我似乎无法弄清楚发生了什么。我正在尝试创建一个 docker-compose 文件,该文件创建一个带有已安装卷的 mysql db 和一个连接到 mysql db 的 go webserver 应用程序。

这是我的 docker-compose 文件:

services:
  db:
    image: mysql:8.0.2
    environment: 
      MYSQL_ROOT_PASSWORD: test
      MYSQL_DATABASE: northernairport
    ports:
      - "3306:3306"
    volumes:
      - /data:/var/lib/mysql
  web:
    depends_on:
      - db
    build: .
    ports:
      - "8080:8080"

我的 go 应用程序似乎无法连接到我的 mysql 数据库,但我认为“depends_on”将确保这是可能的。

我得到的错误:

panic: dial tcp 127.0.0.1:3306: getsockopt: connection refused

谁能告诉我我在这里做错了什么?谢谢。

标签: mysqlgodocker-compose

解决方案


唯一控制服务的depends_on构建和启动顺序。

您的实际问题更有可能是您使用了从 Web 应用程序到数据库的错误地址。我看到您没有定义任何网络,因此您使用的default是为您的应用程序创建的网络docker-compose。这将在默认网络的 DNS 上按名称发布每个服务。

因此,您的 Web 应用程序可能应该db:3306用作数据库地址,而不是localhost:3306127.0.0.1:3306如错误消息中所示。


推荐阅读