如何获得一个docker集装箱的IP和端口从另一个环境variables?

我使用Docker-Compose。

前段时间我用这个代码。 Nginx使用来自像“API_PORT_5432_TCP_ADDR”“API_PORT_5432_TCP_PORT”这样的环境variables的IP和端口。

现在我不能从一个容器连接到其他容器。 我在文档中发现了一些描述,“链接”应该做这样的工作,我的意思是创build环境variables,后来我可以在其他容器中获得它。 但我不知道,我做错了什么。 有没有办法解决这个问题? 如果你给我的链接或一些代码行,会很高兴。

谢谢。

version: '3.0' services: ubuntubase: build: ./ubuntu-base backend: build: ./backend links: - postgresql:db expose: - "6060" depends_on: - ubuntubase - postgresql nginxreverseproxy: build: ./nginx-reverse-proxy expose: - "80" - "443" links: - backend:api ports: - "80:80" volumes: - ./logs/:/var/log/nginx/ depends_on: - ubuntubase - backend postgresql: restart: always image: sameersbn/postgresql:9.6-2 expose: - "5432" depends_on: - ubuntubase environment: - DEBUG=false - DB_USER=... - DB_PASS=... - DB_NAME=... volumes: - /srv/docker/postgresql:/var/lib/postgresql 

links不能通过环境variables工作。 它通过暴露服务的名称,就好像它是一个DNS主机名。 因此,在您的示例中,您的“nginxreverseproxy”服务可以使用主机名“api”连接到“后端”服务。

默认情况下,这些链接使用服务的名称,即如果您指定了:

 links: - backend 

然后你会连接到“后端”。 如果你提供了另一个名字(就像你对“api”所做的那样),那么这个名字就会被作为别名公开。

但是这不会传达这个端口。 如果你想使用非默认端口,你可能需要自己设置一个环境variables,然后告诉你的服务使用它。

例如,你的“后端”暴露了端口6060.如果你的“nginxreverseproxy”不知道,你可以用一个环境variables来告诉它。

 nginxreverseproxy: environment: - BACKEND_PORT=6060 

然后告诉nginx服务使用该环境variables,加上主机名“api”来连接。