Điểm:1

docker - create two container got two different network id instead of using default bridge network

lá cờ uz

My goal was, that Jenkins container will "talk" with Ansible container in order to create Jenkins file for Jenkins pipeline.

I was expected that those two container will "join" to bridge network and get 2 IP addresses of the same network id, but instead additional two networks were created, and each container got IP of different Network id.

Also, expected that those two container will have access to the internet.

So, In my Windows 10 I'm running Docker Desktop, I have 2 docker-compose.yml files,
One, for Jenkins container:

version: '3.7'
services:
  jenkins:
    image: jenkins/jenkins:lts
    privileged: true
    user: root
    ports:
      - 8080:8080
      - 50000:50000
    container_name: jenkins

Another, for Ansible container:

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

I ran the following command for each docker-compose.yml file, so I had two separate machines:

docker-compose up --build

I inspected my container's network details and found out that each container got a different Network ID, see below:

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

check my docker networks section, revealed that 2 more networks were created, besides bridge, host and none:

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

Of course, inspecting bridge network shows that container key is empty:

{
    "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
}

My question are:
a) Why two more docker networks were created when I ran docker-compose up --build command?
b) How can I make those containers working with bridge network and get IPs of the same network id (the bridge network id 172.17.x.x) in order that they'll talk each other?

Điểm:0
lá cờ ro

Giải pháp để kết nối nhiều phiên bản docker-compose là sử dụng các mạng bên ngoài.

Đầu tiên tạo một mạng mới bằng lệnh:

mạng docker tạo mạng của tôi

Sau đó thêm vào cả docker-compose.yml như sau:

mạng:
  mạng lưới của tôi:
    bên ngoài: đúng

Và trong phần mạng của các dịch vụ:

(...)
  mạng:
    - mạng lưới của tôi
(...)

Jenkins docker-compose sẽ trở thành:

phiên bản: '3.7'

mạng:
  mạng lưới của tôi:
    bên ngoài: đúng

dịch vụ:
  jenkin:
    hình ảnh: jenkins/jenkins:lts
    đặc quyền: đúng
    người dùng: gốc
    mạng:
      - mạng lưới của tôi
    cổng:
      - 8080:8080
      - 50000:50000
    container_name: jenkins

Thực hiện theo ý tưởng tương tự cho docker-compose.yml khác.

lá cờ uz
cảm ơn. Vui lòng làm rõ: a) Có cách nào để sử dụng mạng *cầu nối mặc định* không? b) Cú pháp của docker-compose ```version: 3.7``` có bằng ```version 2.0``` không?
lá cờ uz
Làm cách nào để đưa IP tĩnh vào giải pháp của bạn?
João Alves avatar
lá cờ ro
a) Mạng cầu nối mặc định chỉ khả dụng cho các dịch vụ trong một docker-compose.yml cụ thể. Nếu bạn đặt tất cả các dịch vụ trong tệp đó, tất cả chúng sẽ chia sẻ cùng một mạng. b) Mỗi ​​phiên bản docker-compose yaml có cú pháp cụ thể, thường bổ sung cho nhau, nhưng có một số trường hợp ngoại lệ. Tài liệu liên quan đến chủ đề này rất phong phú trong trang docker (https://docs.docker.com/compose/compose-file/compose-versioning/). - Việc sử dụng IP tĩnh trong docker không phổ biến. Bạn có thể giải quyết một địa chỉ IP từ DNS. Một ví dụ: từ jenkins: vùng chứa ansible là `ansible.my_network`.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.