目前,我们拥有使用 Supervisord 进行复杂构建的 docker 容器,以便我们可以将服务分组在一起。例如,nginx 和 ssh。
我正在尝试使用由共享卷链接的更多服务驱动的隔离来重建这些。然而,无需将 IP 映射到主机,我似乎找不到一种方法来允许共享 IP 地址,即使端口可能是离散的。
我想做的是这样的:
version: '2'
services:
web:
image: nginx
volumes:
- /data/web:/var/www
networks:
public:
ipv4_address: 10.0.0.1
ports:
- "10.0.0.1:80:80"
ssh:
image: alpine-sshd
volumes:
- /data/web:/var/www
networks:
public:
ipv4_address: 10.0.0.1
ports:
- "10.0.0.1:22:22"
networks:
public:
external: true
...在哪里public
是预定义的 docker macvlan 网络。
当我尝试这个时,我收到错误:
ERROR: for ssh Cannot start service ssh: Address already in use
我知道另一个解决方案是引入第三个服务作为代理。然而,我认为这是一个足够简单的情况,不需要它。
是否可以将 docker-compose/docker-networking 配置为通过端口进行路由,以允许相同的 IP 地址用于不同的容器?
是否可以将 docker-compose/docker-networking 配置为通过端口进行路由,以允许相同的 IP 地址用于不同的容器?
是的,我们可以(熟悉?-_-!)。 Docker 提供了一个网络模式选项,称为service:service-name
.
当我们执行docker run
,我们可以添加--network=service:service-name
旗帜。这意味着当前容器使用相同的网络命名空间service:service-name
. 更多信息 https://docs.docker.com/compose/compose-file/#network_mode参考这里。
尝试下面的撰写文件。我已经测试过了,效果很好。
version: '2'
services:
web:
image: nginx
networks:
public:
ipv4_address: 10.0.0.2
ports:
- "8880:80"
- "2220:22"
ssh:
image: panubo/sshd
network_mode: "service:web"
depends_on:
- web
networks:
public:
external: true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)