Docker Compose文件中的网络

Docker Compose文件中的网络,docker,networking,service,hyperlink,compose,Docker,Networking,Service,Hyperlink,Compose,我正在为我的web应用程序编写docker compose文件。如果我使用“链接”将服务相互连接,是否还需要包含“端口”?“依赖”是“链接”的替代选项吗?什么对组合文件中的连接服务最有利?中介绍了此功能的核心设置。如果您什么也不做,那么一个服务可以使用其在docker compose.yml文件中的名称作为主机名调用另一个服务,使用容器中进程正在侦听的端口 在启动订单问题之前,这里有一个最小的docker compose.yml演示: 版本:“3” 服务: 服务器: 图片:nginx 客户: 图

我正在为我的web应用程序编写docker compose文件。如果我使用“链接”将服务相互连接,是否还需要包含“端口”?“依赖”是“链接”的替代选项吗?什么对组合文件中的连接服务最有利?

中介绍了此功能的核心设置。如果您什么也不做,那么一个服务可以使用其在
docker compose.yml
文件中的名称作为主机名调用另一个服务,使用容器中进程正在侦听的端口

在启动订单问题之前,这里有一个最小的
docker compose.yml
演示:

版本:“3”
服务:
服务器:
图片:nginx
客户:
图片:busybox
命令:wget-O-http://server/
#要使示例真正起作用,请进行以下操作:
#命令:sh-c'sleep 1;wget-O-http://server/'
你根本不应该使用
链接:
。它是第一代Docker网络的一个重要组成部分,但在现代Docker上没有用处。(类似地,没有理由将
expose:
放在Docker Compose文件中。)

您始终连接到容器内进程运行的端口<代码>端口:是可选的;如果您有
端口:
,跨容器调用总是连接到第二个端口号,并且重新映射没有任何效果。在上面的示例中,
客户机
容器始终连接到默认的HTTP端口80,即使您将
端口:['12345:80']
添加到
服务器
容器中,使其可以在其他端口上进行外部访问

取决于:
影响两件事。尝试将
依赖于:[server]
添加到示例的
客户机
容器中。如果查看启动时打印出来的“启动…”消息,这将强制
服务器
客户端
开始启动之前启动,但这并不能保证
服务器
已启动并运行并准备好服务请求(这是数据库容器的一个常见问题)。如果您仅使用
docker compose up client
启动堆栈的一部分,这也会导致
服务器从它开始

更完整的典型示例可能如下所示:

版本:“3”
服务:
服务器:
#Dockerfile将静态内容复制到图像中
构建:./基于nginx的服务器
端口:
- '12345:80'
客户:
#Dockerfile将安装
# https://github.com/vishnubob/wait-for-it
构建:./基于busybox的客户端
#ENTRYPOINT和CMD通常位于Dockerfile中
入口点:wait-for-it.sh服务器:80--
命令:wget-O-http://server/
取决于:
-服务器

因此,这个领域的问题似乎还有许多其他不必要的选择
container\u name:
为非Compose
docker
命令显式设置容器的名称,而不是让Compose选择容器,并且它为网络目的提供了一个备用名称,但您并不真正需要它<代码>主机名:
影响容器的内部主机名(例如,您可能会在shell提示符中看到),但对其他容器没有影响。您可以手动创建
网络:
,但Compose为您提供了一个
默认的
网络,没有理由不使用它。

“链接”是docker Compose的传统功能,即将消失。建议使用“用户定义的网络”。更多