docker swarm 服务不在同一网段
时间: 2023-08-02 16:31:27 浏览: 91
如果 Docker Swarm 服务不在同一网段,您需要使用 `--advertise-addr` 和 `--listen-addr` 标志来指定它们的 IP 地址。
例如,如果您的 Swarm Manager 在 192.168.1.100 网段,但要加入 Swarm 的 Worker 在 10.0.0.100 网段,您可以使用以下命令:
在 Swarm Manager 上:
```
docker swarm init --advertise-addr 192.168.1.100 --listen-addr 192.168.1.100:2377
```
在 Worker 上:
```
docker swarm join --advertise-addr 10.0.0.100 --listen-addr 10.0.0.100:2377 --token <token> 192.168.1.100:2377
```
这将指定 Swarm Manager 和 Worker 的 IP 地址,并允许它们在不同的网络中通信。
相关问题
docker swarm 的stack文件编排服务到同一网段
如果您的 Docker Swarm 服务都在同一网段,那么您可以使用 Docker Stack 来编排和部署服务。以下是一个示例 Stack 文件,其中包含两个服务,它们都将被部署到 Swarm 的同一网络中:
```yaml
version: '3.9'
services:
web:
image: nginx
deploy:
replicas: 3
placement:
constraints: [node.role == worker]
ports:
- "80:80"
networks:
- webnet
redis:
image: redis
deploy:
replicas: 1
placement:
constraints: [node.role == manager]
networks:
- webnet
networks:
webnet:
```
在这个 Stack 文件中,我们定义了两个服务:`web` 和 `redis`。`web` 服务使用了 Nginx 镜像,并将在每个 Worker 节点上运行 3 个副本,同时将端口 80 映射到宿主机上。`redis` 服务使用 Redis 镜像,并将在 Swarm Manager 节点上运行一个副本。
`networks` 部分定义了一个名为 `webnet` 的网络。这个网络将用于连接 `web` 和 `redis` 服务。在服务定义中,我们使用 `networks` 键来将服务连接到 `webnet` 网络。
要在 Swarm 上部署此 Stack 文件,请使用以下命令:
```
docker stack deploy -c stack.yml myapp
```
其中,`stack.yml` 是 Stack 文件的名称,`myapp` 是 Stack 的名称。这将在 Swarm 上部署 Stack,并将 `web` 和 `redis` 服务部署到 Swarm 的同一网络中。
docker swarm 创建跨多个网段的网络
首先,Docker Swarm 默认使用 overlay 网络模式来创建跨多个主机的网络。但是,如果你需要跨多个网段创建网络,你需要在创建 overlay 网络时指定一个子网。
以下是创建一个跨多个网段的 overlay 网络的示例命令:
```
docker network create --driver overlay --subnet=10.0.0.0/16 my-overlay-network
```
上述命令将创建一个名为 my-overlay-network 的 overlay 网络,并使用 10.0.0.0/16 子网。你可以根据你的需求设置不同的子网。
创建 overlay 网络后,你可以在你的服务或容器中使用该网络。例如:
```
docker service create --name my-service --network my-overlay-network nginx
```
上述命令将创建一个名为 my-service 的服务,并将其分配到 my-overlay-network 网络中。
希望这能回答你的问题!