Docker gogs 连接被 mysql 容器拒绝

Docker gogs connection is refused by mysql container

我在设置本地 git 存储库时遇到了一些问题。我是 docker 的新手,所以这个问题可能很幼稚,但我仍然找不到它。

所以我的想法是: 我想用 gogs(gogs/gogs 图片)创建一个容器并将其连接到 mysql 容器。

为此,我创建了 docker-compose.yml 文件。

version: '3'
services:
  db:
    image: mysql
    ports:
      - "10023:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root!
  ui:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8989:80"
    links:
      - db:mysql
  repo:
    image: gogs/gogs
    ports:
      - "10022:22"
      - "10080:3000"
    volumes:
      - /tmp/gogs:/data gogs/gogs
    links:
      - db:mysql

我都将 phpmyadmin 放在我的设置中,这样我可以轻松测试 mysql 是否已启动并响应其他容器。

遗憾的是,这个环境不起作用,当进入 localhost:10080 上的 gogs 安装页面并尝试创建一个新的 repo 时,它说 tcp 连接已被拒绝。这是错误消息的输出:

dial tcp 127.0.0.1:10023: getsockopt: connection refused

这很奇怪,因为我可以通过 phpmyadmin 访问 mysql 容器。我还能够创建 gogs 数据库。

以前有人遇到过这个问题吗?

不要在容器内使用 localhost 或 127.0.0.1,使用 docker-compose 中定义的服务名称。

dial tcp db:10023

docker-compose networking.

非常感谢gogsdoc_db_1。 His/her 回答完美。我将尝试解释我做错了什么,所以也许这会对 docker 中的新条目有所帮助,例如我自己。

正如bluescores所说。您不应在 docker 容器内使用 localhost 或 127.0.0.1。

为什么不呢?

基本上,当您使用 docker-compose 时,它​​会自动为您的应用创建共享网络,这意味着您不应使用已发布的端口。 在可能的情况下,我必须使用端口 3306 而不是 10023 来连接到我的数据库容器。

如果我想从我的本地机器连接到 mysql,我仍然应该使用端口 10023。

所以我现在的配置是

P.S。 在安装 gogs

之前,不要忘记创建数据库