首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将服务/进程绑定到接口,以防在docker中公开它

将服务/进程绑定到接口,以防在docker中公开它
EN

Stack Overflow用户
提问于 2018-06-27 15:00:08
回答 1查看 264关注 0票数 0

我想了解在docker中公开端口是如何在内部工作的,也就是说,我想知道在主机上使用了哪些接口。让我们考虑三种情况:

(1)

代码语言:javascript
复制
docker run -p 80:80 nginx

(2)码头群的dokcer-compose:

代码语言:javascript
复制
....
services:
    ports:
        published: 80
        target: 80       
....

请不要在这种情况下我们使用overlay网络。(3)码头群的dokcer-compose:

代码语言:javascript
复制
....
services:
    ports:
        published: 80
        target: 80       
        mode: host
....

首先,让我们强调一个事实,即它依赖于容器中包含的进程,它选择绑定哪个接口。但是,它在宿主中的绑定位置呢?我是说哪个接口(lo,eth0..)是否选择作为绑定的接口?

在分界性中,(2)和(3)方法有什么区别?

编辑

让我们考虑第四种情况:

(4)

代码语言:javascript
复制
`dokcer-compose:` for *docker swarm*

....
services:
  s1:
    ports:
        published: 1234
        target: 1234       
        mode: host
    networks:
        n1
  s2:
    ports:
        published: 1234
        target: 1234       
        mode: host
    networks:
        n1
networks:
  n1:
    driver: overlay

其中s1s2被迫部署在不同的节点上(使用约束)。现在,让我们假设s1s2对话,s2使用端口1234s1对话,并且:

(1)服务的IP地址(或服务名称) (2)主机的IP地址(物理地址)。

请告诉我,如果(1)或(2)覆盖网络n1被使用。请注意,这两个服务都连接在这个网络中。

EN

回答 1

Stack Overflow用户

发布于 2018-06-28 09:10:14

你应该在文件上清楚地得到答案。

https://docs.docker.com/engine/swarm/services/#publish-a-services-ports-directly-on-the-swarm-node

在你的情况下(2)

代码语言:javascript
复制
services:
    ports:
        published: 80
        target: 80  

如果您有3个节点N1,N2,N3,那么在这3个节点中的任何一个上按80都可以将您带到应用程序,即使它只是部署在一个节点N3上。

Case (3)

代码语言:javascript
复制
services:
    ports:
        published: 80
        target: 80       
        mode: host

由于该服务仅部署在N3上,因此您只能在N3上访问80,因此N1N2不会在端口80上响应。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51065996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档