$ POSTGRES_PORT_5432_TCP_ADDR和$ POSTGRES_PORT_5432_TCP_PORT从哪里来?

我正在通过https://registry.hub.docker.com/_/postgres/上的正式postgres图像尝试docker postgres。

在文档中运行以下命令并使其运行:

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres docker run -it --link some-postgres:postgres --rm postgres sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres' 

所以我的问题是$ POSTGRES_PORT_5432_TCP_PORT和$ POSTGRES_PORT_5432_TCP_ADDR从哪里来?

它们可以通过Docker链接机制启动到第二个容器。

https://docs.docker.com/userguide/dockerlinks/#environment-variables

当两个容器连接在一起时,Docker将在目标容器中设置一些环境variables,以启用与源容器相关的信息的编程发现。

接下来的模式是:

  • PORT __ADDR将只包含来自URL的IP地址(例如WEBDB_PORT_8080_TCP_ADDR = 172.17.0.82)。
  • PORT__PORT将只包含来自URL的端口号(例如WEBDB_PORT_8080_TCP_PORT = 8080)。