【问题标题】:Connection between docker containersdocker容器之间的连接
【发布时间】:2015-07-01 21:46:07
【问题描述】:
  1. 我有一个 docker-compose.yml,我在其中创建了 2 个容器:A 和 B。
  2. B 是一个运行在 8000 端口和我的 docker-compose 文件中的 Web 服务器 我暴露了 8000 端口
  3. A 在我的 docker-compose-file 中有一个指向 B 的链接。

但是当我在 B 上发出 GET 请求时,我得到了一个错误:

GET http://localhost:8000 dial tcp 127.0.0.1:8000 refused

我该如何解决这个问题?

docker-compose ps 只是告诉我端口是 8000/tcp

【问题讨论】:

  • 看看 docker-compose.yml 文件会很有帮助,你能编辑你的问题并发布吗?
  • docker-compose updocker ps 的输出是什么?它们应该为您提供有关容器 IP 和端口的信息。

标签: connection localhost docker port docker-compose


【解决方案1】:

你能告诉我们你的 docker-compose.yml 文件吗?用于两个容器之间链接的名称实际上创建了一个别名来连接,就像localhost127.0.0.1 的别名一样:https://docs.docker.com/compose/yml/#links

因此,您不应在 GET 请求中通过 localhost 进行连接。而是使用服务 B 的链接中使用的名称,并在其后加上端口。这是一个带有适当 GET 请求 url 的示例配置文件:

docker-compose.yml:

service_a:
    image: service_a_image
    ports:
        - 7000 # maps port to host
    links:
        - service_b
service_b:
    image: serivce_b_image
    expose:
        - 8000 # exposes port to other containers

获取服务 A 到 B 的 URL:

http://service_b:8000

希望这会有所帮助!

【讨论】: