更新於 2024-06-17
- 2024.06.17 參考 容器互連 | 《Docker —— 從入門到實踐》正體中文版 2023.09.14 //gitbook.io
運行 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