【问题标题】:How to access docker container using localhost address如何使用 localhost 地址访问 docker 容器
【发布时间】:2019-10-02 18:07:44
【问题描述】:

我正在尝试使用 localhost 地址从另一个容器访问 docker 容器。

撰写文件非常简单。两个容器端口都暴露在外。 构建时没有问题。

在我的主机上我可以成功执行curl http://localhost:8124/ 并得到响应。

但在 django_container 中尝试相同的命令时,我得到 Connection refused 错误。

我尝试将它们添加到同一个网络中,结果仍然没有改变。

如果我尝试使用该容器的内部 ip 执行,例如 curl 'http://172.27.0.2:8123/',我会得到响应。

这是默认行为吗?如何使用localhost 联系clickhouse_container

version: '3'

services:
  django:
    container_name: django_container
    build: ./django
    ports:
      - "8007:8000"
    links:
      - clickhouse:clickhouse
    volumes:
      - ./django:/usr/src/run
    command: bash /usr/src/run/run.sh

  clickhouse:
    container_name: clickhouse_container
    build: ./clickhouse
    ports:
      - "9001:9000"
      - "8124:8123"
      - "9010:9009"

【问题讨论】:

标签: docker docker-compose


【解决方案1】:

因此,使用- "8124:8123" 此处的这一行,您将 clickhouse 容器的端口映射到 localhost 8124。这允许您从 localhost 的端口 8124 访问 clickhouse。

如果你想从 dockerhost 网络中点击 clickhouse 容器,你必须使用容器的主机名。这是我喜欢做的事情:

version: '3'

services:
  django:
    hostname: djano
    container_name: django
    build: ./django
    ports:
      - "8007:8000"
    links:
      - clickhouse:clickhouse
    volumes:
      - ./django:/usr/src/run
    command: bash /usr/src/run/run.sh

  clickhouse:
    hostname: clickhouse
    container_name: clickhouse
    build: ./clickhouse
    ports:
      - "9001:9000"
      - "8124:8123"
      - "9010:9009"

如果您像我上面所做的那样进行更改,您应该能够像 curl http://clickhouse:8123 这样从 django 容器中访问 c​​lickhouse。

【讨论】:

    【解决方案2】:

    在@Billy Ferguson 的回答中,您可以在主机中使用localhost 访问,因为:您定义了一个端口映射以将localhost:8124 路由到clickhouse:8123

    但是当来自其他容器(django)时,你不能。但如果你坚持,有一个丑陋的解决方法:与network_mode 共享主机的网络命名空间,但这样 django 容器将只共享主机的所有网络。

    services:
      django:
        hostname: djano
        container_name: django
        build: ./django
        ports:
           - "8007:8000"
        links:
           - clickhouse:clickhouse
        volumes:
          - ./django:/usr/src/run
        command: bash /usr/src/run/run.sh
        network_mode: "host"
    

    【讨论】:

      【解决方案3】:

      这取决于 config.xml 设置。如果在 config.xml 0.0.0.0 你可以使用 clickhouse-client -h your_ip --port 9001

      【讨论】:

        猜你喜欢
        • 2020-09-16
        • 2022-05-08
        • 2020-07-20
        • 1970-01-01
        • 2021-04-07
        • 2022-01-09
        • 2015-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多