version: '3.8'
services:
app:
image: registry.example.com/app
environment:
# Tell the application to listen on all interfaces, port 8080
BIND_ADDR: '0.0.0.0:8080'
ports:
# As the default HTTP service on the first IP address
- '10.0.0.4:80:8080'
# On its own port on the last IP address
- '10.0.0.8:8080:8080'
# And not on any of the other IP addresses at all
1条答案
按热度按时间h7appiyu1#
您说得对,Docker得网络隔离确实涉及到了:您的应用程序将看到一个不可预测的IP地址,Docker提供了一个NAT层,将主机的网络地址转换为该地址。
最常见的设置方法是将应用程序设置为绑定到0.0.0.0“所有接口”。Compose
ports:
设置采用可选的IP地址部分,默认值也为0.0.0.0。您可以有多个ports:
以同一容器端口为目标,只要主机IP和端口对不与其他绑定端口或非Docker服务冲突。举一个假设的例子:
另一种方法是使用
network_mode: host
禁用Docker的网络堆栈。在这种模式下,您的应用程序将直接看到所有主机接口,并且如果它有特定的逻辑来选择性地绑定到它们,这将像程序不在容器中运行一样工作。但是,这也禁用了所有其他Docker网络功能:您不能隐藏或重新Map端口,也不能通过主机名与其他容器通信,只能通过它们发布的端口。我通常不鼓励主机联网,但对于这种特殊情况,这可能是一种合理的方法。