了解 docker compose 中的端口和链接
Understanding ports and links in docker compose
根据我对 docker compose / fig 的理解,如果您不想向其他人公开端口,那么在两个 services/images 之间创建一个 link 是一个主要原因。
喜欢这里 db 不公开任何端口,仅 linked:
web:
build: .
links:
- db
ports:
- "8000:8000"
db:
image: postgres
web 认为 db 运行s 在其本地主机上吗?我会从 web 中的 script/program 连接到 localhost:5432 (来自 postgresql 的标准端口)以获得数据库连接吗?
如果这是正确的,如何在不暴露的情况下将端口 5432 更改为 6432?
我会 运行 postgresql 在不同的端口上吗?
更新:
一些输入后 links 有用:
web 认为 db 运行s 在环境变量 DOCKER_DB 或其他东西指向的主机上像那样。您的服务应指向该变量(主机),而不是本地主机。
db 容器将端口(通过 EXPOSE)暴露给它的链接容器,同样是在变量中。您可以 运行 数据库在任何您想要的端口上,只要它是 EXPOSEd。
docker-compose
/ fig
主要是 starting/managing 多个图像的主力,这些图像在某种程度上相互依赖。
要完全理解容器之间的 链接 ,您应该知道创建了一个主机条目,通常在 /etc/hosts
文件中,它将容器主机名映射到 docker 托管网络到特定的 ip 地址。所以如果你想访问 postgres db 你必须指向 db
主机名而不是 localhost
.
关于暴露的端口,大部分镜像已经暴露了一些端口,所以可能你只是使用一个图像并且那个端口是暴露的,你可以随时覆盖它。
更新 Docker Compose 1.6.0+
By default Compose sets up a single network for your app. Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name.
source
只有当你想为容器定义别名时才可以定义容器之间的链接,如下所示:
version: '2'
services:
web:
build: .
links:
- "db:database"
db:
image: postgres
根据我对 docker compose / fig 的理解,如果您不想向其他人公开端口,那么在两个 services/images 之间创建一个 link 是一个主要原因。
喜欢这里 db 不公开任何端口,仅 linked:
web:
build: .
links:
- db
ports:
- "8000:8000"
db:
image: postgres
web 认为 db 运行s 在其本地主机上吗?我会从 web 中的 script/program 连接到 localhost:5432 (来自 postgresql 的标准端口)以获得数据库连接吗?
如果这是正确的,如何在不暴露的情况下将端口 5432 更改为 6432? 我会 运行 postgresql 在不同的端口上吗?
更新:
一些输入后 links 有用:
web 认为 db 运行s 在环境变量 DOCKER_DB 或其他东西指向的主机上像那样。您的服务应指向该变量(主机),而不是本地主机。
db 容器将端口(通过 EXPOSE)暴露给它的链接容器,同样是在变量中。您可以 运行 数据库在任何您想要的端口上,只要它是 EXPOSEd。
docker-compose
/ fig
主要是 starting/managing 多个图像的主力,这些图像在某种程度上相互依赖。
要完全理解容器之间的 链接 ,您应该知道创建了一个主机条目,通常在 /etc/hosts
文件中,它将容器主机名映射到 docker 托管网络到特定的 ip 地址。所以如果你想访问 postgres db 你必须指向 db
主机名而不是 localhost
.
关于暴露的端口,大部分镜像已经暴露了一些端口,所以可能你只是使用一个图像并且那个端口是暴露的,你可以随时覆盖它。
更新 Docker Compose 1.6.0+
By default Compose sets up a single network for your app. Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name. source
只有当你想为容器定义别名时才可以定义容器之间的链接,如下所示:
version: '2'
services:
web:
build: .
links:
- "db:database"
db:
image: postgres