首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker -创建两个容器,得到两个不同的网络id,而不是使用默认的桥网络。

docker -创建两个容器,得到两个不同的网络id,而不是使用默认的桥网络。
EN

Server Fault用户
提问于 2021-09-03 07:11:33
回答 1查看 851关注 0票数 1

我的目标是,Jenkins容器将与Ansible容器“交谈”,以便为Jenkins管道创建Jenkins文件。

我预期这两个容器将“加入”到桥接网络并获得相同网络id的两个IP地址,但相反,创建了额外的两个网络,每个容器获得不同网络id的IP。

此外,预计这两个容器将能够访问互联网。

所以,在我的Windows 10中我运行的是Desktop,我有两个Docker -come.yml文件,

第一,对于Jenkins集装箱:

代码语言:javascript
复制
version: '3.7'
services:
  jenkins:
    image: jenkins/jenkins:lts
    privileged: true
    user: root
    ports:
      - 8080:8080
      - 50000:50000
    container_name: jenkins

另一种,适用于不可接受的容器:

代码语言:javascript
复制
version: '2'
services:
  ansible:
    container_name: ansible
    hostname: ansible
    image: ansible
    volumes:
      - ~/product/ansible:/ansible
    working_dir: /ansible
    build:
      context: .
      dockerfile: Dockerfile
    dns:
      - 200.20.200.20

我对每个docker-compose.yml文件运行了以下命令,因此我有两台独立的机器:

代码语言:javascript
复制
docker-compose up --build

我检查了容器的网络详细信息,发现每个容器都有不同的网络ID,请参见下面的内容:

代码语言:javascript
复制
PS > docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ansible
172.18.0.2
PS > docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' jenkins
172.19.0.2

请查看“我的停靠网络”部分,发现除了桥接器、主机和无网络之外,还创建了两个网络:

代码语言:javascript
复制
PS > docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
8cefaed24885   ansible_default   bridge    local
44bedcd1622d   bridge            bridge    local
61e1c7f7051e   host              host      local
b5a7a7a424a4   jenkins_default   bridge    local
4e5d6c77cb5a   none              null      local

当然,检查桥接网络会发现容器密钥是空的:

代码语言:javascript
复制
{
    "Name": "bridge",
    "Id": "44bedcd1622d820ce4e29a5cd545f244ba2d303102f1956fe76069a63e7c220e",
    "Created": "2021-08-25T13:13:57.6577149Z",
    "Scope": "local",
    "Driver": "bridge",
    "EnableIPv6": false,
    "IPAM": {
        "Driver": "default",
        "Options": null,
        "Config": [
            {
                "Subnet": "172.17.0.0/16",
                "Gateway": "172.17.0.1"
            }
        ]
    },
    "Internal": false,
    "Attachable": false,
    "Ingress": false,
    "ConfigFrom": {
        "Network": ""
    },
    "ConfigOnly": false,
    "Containers": {},
    "Options": {
        "com.docker.network.bridge.default_bridge": "true",
        "com.docker.network.bridge.enable_icc": "true",
        "com.docker.network.bridge.enable_ip_masquerade": "true",
        "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
        "com.docker.network.bridge.name": "docker0",
        "com.docker.network.driver.mtu": "1500"
    },
    "Labels": {},
    "CreatedTime": 1629897237657
}

我的问题是:

( a)当我运行docker-compose up --build命令时,为什么还要创建两个码头网络?

( b)如何使那些容器与桥网络一起工作,并获得相同网络id (桥网络id 172.17.x.x)的in,以便它们能够相互交谈?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2021-09-03 08:42:01

连接多个坞-组合实例的解决方案是使用外部网络。

首先,使用以下命令创建一个新网络:

代码语言:javascript
复制
docker network create my-network

然后将以下内容添加到两个docker-compose.yml中:

代码语言:javascript
复制
networks:
  my_network:
    external: true

在服务的网络部分:

代码语言:javascript
复制
(...)
  networks:
    - my_network
(...)

詹金斯的船坞组合将变成:

代码语言:javascript
复制
version: '3.7'

networks:
  my_network:
    external: true

services:
  jenkins:
    image: jenkins/jenkins:lts
    privileged: true
    user: root
    networks:
      - my_network
    ports:
      - 8080:8080
      - 50000:50000
    container_name: jenkins

对于另一个码头商-Compose.yml,请遵循相同的想法。

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

https://serverfault.com/questions/1076500

复制
相关文章

相似问题

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