如何使用本地主机地址访问docker容器

时间:2019-05-15 14:40:47

标签: docker docker-compose

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

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

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

但是在django_container内尝试相同的命令时出现Connection refused错误。

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

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

这是默认行为吗?如何使用clickhouse_container到达localhost

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"

3 个答案:

答案 0 :(得分:0)

因此,在此行- "8124:8123"处,您正在将Clickhouse容器的端口映射到localhost8124。这使您可以从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"

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

答案 1 :(得分:0)

就像@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"

答案 2 :(得分:0)

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