如何从另一个具有环境变量的容器中获取一个 docker 容器中的 ip 和端口?
How to get ip and port in one docker container form other one with environment variables?
我用Docker-Compose.
前段时间我用过这段代码。 Nginx 使用环境变量中的 ip 和端口,如下所示 "API_PORT_5432_TCP_ADDR" "API_PORT_5432_TCP_PORT".
现在我无法从一个容器连接到另一个容器。我在文档中找到了一些描述,"links" 应该做这样的工作,我的意思是它创建环境变量,稍后我可以在其他容器中获取它。但我不知道,我做错了什么。有没有办法解决这个问题?如果你给我链接或一些代码行,我会很高兴。
谢谢。
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
不能通过环境变量工作。它通过将服务名称公开为 DNS 主机名来工作。因此,在您的示例中,您的 "nginxreverseproxy" 服务可以使用主机名 "api".
连接到 "backend" 服务
默认情况下,这些链接使用服务的名称,即如果您指定:
links:
- backend
然后您将连接到 "backend"。如果您提供另一个名称(就像您对 "api" 所做的那样),那么该名称将作为别名公开。
然而,这并不与端口通信。如果您想使用非默认端口,您可能必须自己设置一个环境变量,然后告诉您的服务使用它。
例如,你的"backend"暴露了端口6060。如果你的"nginxreverseproxy"不知道,你可以用环境变量告诉它。
nginxreverseproxy:
environment:
- BACKEND_PORT=6060
然后告诉 nginx 服务使用该环境变量加上主机名 "api" 进行连接。
我用Docker-Compose.
前段时间我用过这段代码。 Nginx 使用环境变量中的 ip 和端口,如下所示 "API_PORT_5432_TCP_ADDR" "API_PORT_5432_TCP_PORT".
现在我无法从一个容器连接到另一个容器。我在文档中找到了一些描述,"links" 应该做这样的工作,我的意思是它创建环境变量,稍后我可以在其他容器中获取它。但我不知道,我做错了什么。有没有办法解决这个问题?如果你给我链接或一些代码行,我会很高兴。
谢谢。
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
不能通过环境变量工作。它通过将服务名称公开为 DNS 主机名来工作。因此,在您的示例中,您的 "nginxreverseproxy" 服务可以使用主机名 "api".
默认情况下,这些链接使用服务的名称,即如果您指定:
links:
- backend
然后您将连接到 "backend"。如果您提供另一个名称(就像您对 "api" 所做的那样),那么该名称将作为别名公开。
然而,这并不与端口通信。如果您想使用非默认端口,您可能必须自己设置一个环境变量,然后告诉您的服务使用它。
例如,你的"backend"暴露了端口6060。如果你的"nginxreverseproxy"不知道,你可以用环境变量告诉它。
nginxreverseproxy:
environment:
- BACKEND_PORT=6060
然后告诉 nginx 服务使用该环境变量加上主机名 "api" 进行连接。