首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker macvlan中的绑定地址

Docker macvlan中的绑定地址
EN

Stack Overflow用户
提问于 2017-12-06 17:09:23
回答 1查看 1.7K关注 0票数 0

我正在尝试构建一个带有N个容器绑定到同一个ip的macvlan。每个容器将公开一个服务。要做到这一点:

代码语言:javascript
复制
sudo docker network create -d macvlan \
    --subnet=192.168.4.0/24 \
    --ip-range=192.168.4.0/24 \
    --gateway=192.168.4.201 \
    -o macvlan_mode=bridge \
    -o parent=eth0 macvlan70

正在运行的集装箱:

代码语言:javascript
复制
sudo docker run --net=macvlan70 -P -d --name test_sshd1 eg_ssh
sudo docker run --net=macvlan70 -P -d --name test_sshd2 eg_ssh

桥牌:

代码语言:javascript
复制
sudo ip link add mymacvlan90 link eth0 type macvlan mode bridge
sudo ip addr add 192.168.4.10/24 dev mymacvlan90
sudo ifconfig mymacvlan90 up

此时,我可以从主机中pingnmap每个容器。我使用inspect检查每个容器的"IPAddress"macvlan检查结果:

代码语言:javascript
复制
"Containers": {
            "89ed3de20801bf096b389379bb546da03f3452e80dbabad89c5457bdc4dcc5fc": {
                "Name": "test_sshd1",
                "EndpointID": "6a7d774ae7e3ce3aac877523968b2ce5a026ae740c059b61162ceb170d53a0c4",
                "MacAddress": "02:42:c0:a8:04:01",
                "IPv4Address": "192.168.4.1/24",
                "IPv6Address": ""
            },
            "ca13b48ccbc267859f406084357dadcd3592cb678502b7086908d6d895728632": {
                "Name": "test_sshd2",
                "EndpointID": "98ce081e94a209838bb4281613055b32967ea85c40c2e3814fe73a88bc9cb380",
                "MacAddress": "02:42:c0:a8:04:02",
                "IPv4Address": "192.168.4.2/24",
                "IPv6Address": ""
            }

现在我正在创建另一个容器,如下所示:

代码语言:javascript
复制
sudo docker run --net=macvlan70 -p 192.168.4.1:66:22 -d --name test_sshd4 eg_ssh

我的目标是在同一个ip和mac下公开2个通用服务(试图模仿N个服务的真正机器)。容器是成功创建的。但是如果我运行这个命令:

代码语言:javascript
复制
$ nmap 192.168.4.1 -p 66

Starting Nmap 7.01 ( https://nmap.org ) at 2017-12-06 16:57 WET
Nmap scan report for 192.168.4.1
Host is up (0.00021s latency).
PORT   STATE  SERVICE
66/tcp closed sqlnet

我还以为66点开放港口呢。但事实并非如此。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-06 17:18:19

不能使用-p绑定到另一个容器的地址。用于在主机接口上公开容器。

您可以在与现有容器相同的网络命名空间中启动新容器:

代码语言:javascript
复制
docker run --net=container:test_sshd1 -d --name test_sshd4 eg_ssh

您的评论:

当然,你不能把两件东西绑在同一个地址的同一个端口上。

一个选项是将第二个容器中的ssh配置为侦听端口22以外的其他内容。设置映像,以便将侦听端口作为环境变量传递(因此可以执行docker run -e SSHD_LISTEN_PORT=66 ...或其他操作)。

第二种选择是将它们都绑定到主机地址(例如桥地址@ 192.168.4.10)。首先从-p 192.168.4.10:22:22开始,第二个从-p 192.168.4.10:66:22开始。这将在192.168.4.10上公开两个服务,一个在端口22,一个在端口66。

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

https://stackoverflow.com/questions/47679812

复制
相关文章

相似问题

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