Docker-Compose 服务不通信

Docker 新手警报。希望这不是一个愚蠢的问题,但我似乎无法弄清楚发生了什么。我正在尝试创建一个 docker-compose 文件,该文件创建一个带有已安装卷的 mysql 数据库和一个连接到 mysql 数据库的 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

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


胡子哥哥
浏览 91回答 2
2回答

红颜莎娜

onlydepends_on控制服务的构建和启动顺序。您的实际问题更有可能是您使用了从 Web 应用程序到数据库的错误地址。我看到您没有定义任何网络,因此您正在使用default为您的应用程序创建的网络docker-compose。这将在默认网络的 DNS 上按名称发布每个服务。因此,您的 Web 应用程序可能应该用作db:3306数据库地址,而不是localhost:3306错误127.0.0.1:3306消息中指示的地址。

一只斗牛犬

该ports部分用于以下列格式将容器端口与主机映射ports (HOST:CONTAINER)。这意味着您正在尝试访问主机的机器,而是配置web要连接的应用程序db:3306。
打开App,查看更多内容
随时随地看视频慕课网APP