運行 DB, Web 兩容器

docker run -d --name db ... postgres
docker run -d --name app --link db:psql -t alpine sh

其中 --link 的值為 <其他容器名稱>:<容器內別名>

docker ps
# CONTAINER ID   IMAGE      COMMAND  CREATED  STATUS   PORTS      NAMES
# 436001e2d375   postgres   ...      ...      ...      5432/tcp   db
# 71053cbbb785   alpine     ...      ...      ...                 app

Docker 透過 環境變數/etc/hosts 的方式建立容器的連線訊息。

docker exec app env
# PSQL_PORT=tcp://172.17.0.2:5432
# PSQL_PORT_5432_TCP=tcp://172.17.0.2:5432
# PSQL_PORT_5432_TCP_ADDR=172.17.0.2
# PSQL_PORT_5432_TCP_PORT=5432
# PSQL_PORT_5432_TCP_PROTO=tcp
# PSQL_NAME=/app/psql
# PSQL_ENV_POSTGRES_PASSWORD=myspd
# PSQL_ENV_GOSU_VERSION=1.17
# PSQL_ENV_LANG=en_US.utf8
# PSQL_ENV_PG_MAJOR=16
# PSQL_ENV_PG_VERSION=16.3-1.pgdg120+1
# PSQL_ENV_PGDATA=/var/lib/postgresql/data
# ...
docker exec app cat /etc/hosts
# 127.0.0.1       localhost
# ...
# #     link_alias ─╮   ╭─ 主機名   ╭─ 容器名
# 172.17.0.2      psql d04fa2948b3b db   # <-- 這是 link 進來的容器
# 172.17.0.3      6e36d1724f57           # <-- 這是本容器
docker exec app ping db
# PING db (172.17.0.2): 56 data bytes
# 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.055 ms
# 64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.109 ms
# 64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.116 ms