如何让主机网络与Docker Swarm模式一起工作

0md85ypi  于 2023-06-21  发布在  Docker
关注(0)|答案(2)|浏览(176)

从最近合并到docker 17.06候选版本的PR中,我们现在支持使用swarm服务的主机网络。然而,尝试一个非常相似的命令,我看到一个错误:

$ docker service create --name nginx-host --network host nginx                                                              
Error response from daemon: could not find the corresponding predefined swarm network: network host not found

我正在运行17.06的候选版本:

$ docker version
Client:
 Version:      17.06.0-ce-rc2
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   402dd4a
 Built:        Wed Jun  7 10:07:14 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.06.0-ce-rc2
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   402dd4a
 Built:        Wed Jun  7 10:06:06 2017
 OS/Arch:      linux/amd64
 Experimental: true

我的命令和docker现在支持的命令有什么不同?

watbbzwu

watbbzwu1#

在与docker开发人员讨论后,此功能需要在升级到17.06后初始化swarm。在群集初始化运行之前创建的主机和网桥网络不能与节点本地网络一起使用。由于这是一个测试环境,因此使用以下命令重新创建了我的swarm:

$ docker swarm leave --force
Node left the swarm.

$ docker swarm init
Swarm initialized: current node (***) is now a manager.

...

现在docker service create命令起作用了:

$ docker service create --name nginx-host --network host nginx
i83udvgk0qga0k7toq4v7kh0x

$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                                                                                             PORTS
i83udvgk0qga        nginx-host          replicated          1/1                 docker.io/library/nginx@sha256:41ad9967ea448d7c2b203c699b429abe1ed5af331cd92533900c6d77490e0268

为了验证,让我们检查容器内的网络接口:

$ docker ps | grep nginx
7024a2764b46        nginx               "nginx -g 'daemon ..."   16 hours ago        Up 16 hours                             nginx-host.1.i2blydombywzhz9zy06j8wrzf

$ docker exec 702 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether ***
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ***
...
ecr0jaav

ecr0jaav2#

是的@dev93,有一种方法可以通过docker-compose文件(yml)使用主机网络创建swarm服务。

version: "3.9"
services:  
  nginx:
    image: nginx
    networks:
      - outside

networks:
    outside:
      name: "host"
      external: true

如果你已经阅读到这里,你也想知道,一旦你使用主机网络启动你的服务,你就不能再成为覆盖网络的一部分了。When using host, that no other networks are allowed

相关问题