如何从另一个容器中获取容器Ip?

时间:2017-01-18 19:39:18

标签: node.js postgresql docker docker-compose

我有以下docker-compose文件:

version: '2'
services:
  node:
    build: ./node/
    ports:
      - "3000:3000"
    volumes:
      - ~/src/api:/code
    links:
      - postgres
    environment:
      - NODE_ENV=dev
      - POSTGRES_ADDRESS=postgres

  postgres:
    build: ./postgres/
    ports:
      - "8000:5432"
    environment:
      - POSTGRES_PASSWORD=pw
    volumes:
      - ~/Postgres/data/:/var/lib/postgresql/data

但是当我在我的nodejs中访问process.env.POSTGRES_ADDRESS时,它返回'postgres'。这是我一直这样做的方式,它应该返回postgres容器的ip。

有关如何访问postgres容器ip的任何建议吗?

2 个答案:

答案 0 :(得分:1)

来自文档:"环境变量不再是连接到链接服务的推荐方法。"

https://docs.docker.com/compose/link-env-deprecated/

@Bukharov谢尔盖的评论是公认的答案:

"为什么需要容器IP?您始终可以通过容器名称访问,例如您的示例中的postgres。可能需要将此问题重命名为"如何从另一个容器中获取容器Ip?"因为env变量不能动态地将容器名称转换为ip地址 - "

因为我不需要IP,只能连接到容器。

答案 1 :(得分:0)

您可以按容器名称访问docker network中的另一个容器。

docker也通过ip 127.0.0.11创建DNS服务器,你可以问它“我的容器在哪里”,如nslookup postrges