您好,我不了解以下内容:
-在docker
世界中,根据我的理解:
application
公开的端口鉴于这些事实,我们在docker-expose
内配置了2个容器
如果:
app | Host Port | Container Port | App Port
app1 8300 8200 8200
app2 9300 9200 9200
如果app2
需要直接通过app1
与docker-host
通信,为什么我要使用链接,因为我仍然必须在app2
的环境中对{ hostname
中的{1}}和port
(app1
的容器名称和app1
的容器的port
的容器名)?(在我们的示例中:app1
和port=8200
)
host=app1Inst
答案 0 :(得分:2)
您不需要在现代Docker上使用链接。但是,您绝对不应在任何地方对主机名或端口进行硬编码。 (例如,请参阅每个SO问题,这些问题指出在直接在开发人员系统上运行时可以与localhost
进行服务交互,而在Docker中运行时则需要其他主机名。) docker-compose.yml
文件是部署时配置,是设置从一个服务指向另一个服务的环境变量的好地方。
正如您在拟议的docker-compose.yml
文件中所指出的那样,Docker网络和相关的DNS服务基本上完全替代了链接。链接首先存在,但不再有用。
还请注意,Docker Compose将为您创建一个默认网络,并且docker-compose.yml
文件中的服务块名称可用作主机名。您可以将该文件缩小为:
version: '3'
services:
app1:
image: app1img
ports:
- '8300:8200'
app2:
image: app2img
ports:
- '9300:9200'
env:
APP1_URL: 'http://app1:8200'
depends_on:
- app1
答案 1 :(得分:1)
简短的回答,不,您不需要链接,它现在在docker中已弃用,不推荐使用。 https://docs.docker.com/network/links/
话虽如此,由于两个容器都在同一网络ret-net
上,因此即使没有ports
设置,它们也可以在所有端口之间自由发现并相互通信。
ports
设置对于从外部访问容器(例如,容器)起作用。从主机。
environment
设置仅在容器内设置环境变量,因此应用程序知道如何找到app1Inst
和正确的端口8200
。