我是docker的新手,一直在将我的应用程序docker化到单个服务器上。目前为止,一切都很好,也能正常工作。然而,有一件事我不太明白。我使用docker-compose来管理所有内容(尚未为我的项目创建dockerfile),在docker-compose中有一个ports
属性。如果我这样写:
ports:
8085:80
它将在0.0.0.0:8085上监听,这意味着外界可以访问我的服务器。经过一些讨论和谷歌搜索,我发现我可以使用docker桥接网络中的IP地址轻松进行端口映射:
ports:
172.17.0.1:8085:80
这将仅在172.17.0.1:8085上监听,这很好,因为它只在内部监听并且我的nginx代理流量到必要的端口(例如
proxy_pass http://172.17.0.1:8085
)。了解更多关于docker和它们的工作方式后,我意识到所有这些容器都有自己的IP地址,只向这些地址公开端口。例如,我的一个“web”容器具有IPv4地址172.17.0.10,端口80已公开。如果我在其中一个容器上执行docker inspect
,我将看到容器的IP地址。现在,我想在我的nginx中使用这些IP地址。不是
proxy_pass http://172.17.0.1:8085
,我想做的是http://172.17.0.10
。我个人认为这是一个更优雅的接口,但有一件事让我担心。如果我重新启动我的机器会发生什么?所有容器将以某种顺序启动。如果我有5个web容器,并且它们以随机顺序启动,我能确定这些容器的IP地址将是相同的吗?还是它们会改变?我应该始终在docker-compose中使用ports
供nginx使用吗?如果是,如何使每个容器具有不同的IP而不是具有相同IP的不同端口?如果我创建另一个docker网络接口(假设在子网172.17.1.0中),并为公开的“public”端口分配来自该接口的不同IP,这样可以吗?这意味着在一个容器中使用172.17.1.1:80:80
,在另一个容器中使用172.17.1.2:80:80
等。