【问题标题】:Connection refused in Docker containers communicating through exposed ports通过暴露端口进行通信的 Docker 容器中的连接被拒绝
【发布时间】:2015-06-30 16:01:24
【问题描述】:

您好,我需要连接三个 docker 容器,以便它们可以一起工作。我把这三个容器称为

  • 容器 1 - pga(端口 80 上的 apache 网络服务器)
  • 容器 2 - 服务器(apache airavata 服务器在端口 8930)
  • 容器 3 - 兔子(RabbitMQ 在端口 5672)

我已将 rabbitMQ 作为(容器 3)启动

docker run -i -d --name rabbit -p 15672:15672 -t rabbitmq:3-management

我已将服务器(容器 2)启动为

docker run -i -d --name server --link rabbit:rabbit --expose 8930 -t airavata_server /bin/bash

现在从服务器内部(容器 2)我可以在端口 5672 访问 rabbit(容器 3)。当我尝试时

nc -zv container_3_port 5672 表示连接成功。

到目前为止,我对通过链接的 docker 连接感到满意。 现在我创建了另一个容器 pga(container 1) as

docker run -i -d --name pga --link server:server -p 8080:80 -t psaha4/airavata_pga /bin/bash

当我尝试访问服务器(容器 2)的服务时,现在从新的 pga 容器内部说连接拒绝

我已经从服务器内部验证了容器服务在 8930 端口上运行,它在创建容器时被暴露,但它仍然拒绝来自它所链接的其他容器的连接。

我在任何地方都找不到任何人描述的类似情况,也不知道如何调试。请帮我找出方法。

命令输出:docker exec server lsof -i :8930

exec: "lsof": $PATH 中找不到可执行文件 Cannot run exec command fb207d2fe5b902419c31cb8466bcee4ba551b097c39a7405824c320fcc67f5e2 in container 995b86032b0421c5199eb635bd65669b1aa93f96b60da4a49328050f7048197a: [8] System error: exec: "lsof": executable file not found in $PATH Error starting exec command in container fb207d2fe5b902419c31cb8466bcee4ba551b097c39a7405824c320fcc67f5e2: Cannot run exec command fb207d2fe5b902419c31cb8466bcee4ba551b097c39a7405824c320fcc67f5e2 in container 995b86032b0421c5199eb635bd65669b1aa93f96b60da4a49328050f7048197a: [8] System error: exec: "lsof": executable file not found in $PATH

【问题讨论】:

  • 你能用docker exec server lsof -i :8930的输出来编辑你的问题吗?

标签: apache docker


【解决方案1】:

注意:打算对此进行扩展,但我的孩子刚刚病了。当我有机会时,将解决问题中的调试问题。

您可能会发现使用docker-compose 会更容易,因为它可以让您使用一个命令运行它们并将配置保持在源代码控制之下。一个示例配置文件(来自my website)如下所示:

database:
    build: database
    env_file:
        - database/.env
api:
    build: api
    command: /opt/server/dist/build/ILikeWhenItWorks/ILikeWhenItWorks
    env_file:
        - api/.env
    links:
        - database
    tty:
        false
    volumes:
        - /etc/ssl/certs/:/etc/ssl/certs/
        - api:/opt/server/
webserver:
    build: webserver
    ports:
        - "80:80"
        - "443:443"
    links:
        - api
    volumes_from:
        - api

我发现这些文件非常易读和易于理解,它们基本上准确地说明了它们在做什么。您可以在my source code 中查看它与周围目录结构的关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2020-08-19
    • 2018-04-21
    • 2020-11-30
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多