Ubuntu16.04에서 Docker 컨테이너에 여러 NIC 브리지 연결
두 개의 Docker 호스트 네트워크 카드를 Docker 컨테이너에 연결할 수 있는 기회가 있기 때문에 이 방법을 정리해 보겠습니다.
여러 단락의 소통이 필요하거나 DHCPd 등 L2 연결이 필요한 경우에 유용하다.
최종 구성
최종적으로 Docker 컨테이너에서 Docker 호스트에서 네트워크로의 구성은 다음과 같습니다.
Docker에 대한 네트워크는 @hico_horiuchi 를 참조하십시오.
Docker의 기본 학습 ~ Docker의 네트워크 - Qiita
Docker 호스트 설정
네트워크 설정
eth0
및 eth1
두 개의 네트워크 카드가 있는 가상 시스템에 Ubuntu Server 16.04가 설치되었습니다.NIC의 이름이
ensXX
인 경우 다음 수정 사항을 참조하십시오/etc/default/grub
.$ sudo sed -i 's/^GRUB_CMDLINE_LINUX=""$/GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"/g' /etc/default/grub
$ sudo update-grub
$ sudo reboot
다리를 만들다
br0
수정eth0
, br1
수정eth1
, /etc/network/interfaces
수정brctl
.네트워크 변경 사항을 적용하려면 다시 시작해야 합니다.
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
auto br0
iface br0 inet static
address 10.1.1.2
netmask 255.255.255.0
up route add default gw 10.1.1.1
bridge_ports eth0
bridge_maxwait 0
bridge_fd 0
bridge_stp off
auto br1
iface br1 inet static
address 172.16.1.2
netmask 255.255.255.0
bridge_ports eth1
bridge_maxwait 0
bridge_fd 0
bridge_stp off
다리 상태 확인 등에 bridge-utils
명령을 사용하기 때문에 br0
넣으면 편리하다$ sudo apt-get install -y bridge-utils
Docker 설치
Docker는 개인용 Ansible Playbook을 사용하여 최신 버전을 설치합니다.
수동으로 설치할 때는 networking - Network interface name changes after update to 15.10 - udev changes - Ask Ubuntu 을 참조하십시오.
$ git clone [email protected]:hico-horiuchi/hiconyan-com-ansible.git
$ cd hiconyan-com-ansible
$ virtualenv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
$ source venv/bin/activate
$ ansible-playbook -i hosts -t common_apt,common_ssh,docker site.yml
[conoha]
10.1.1.2 ansible_python_interpreter=/usr/bin/python3
Docker 네트워크 만들기
두 개의 Docker 네트워크를 만듭니다. 연결
br0_network
br1
과 연결br1_network
입니다.gateway
: 브리지의 IP 주소를 지정합니다(예: br0
.com.docker.network.bridge.enable_ip_masquerade
: NAPT를 허용하지 않음false
을 지정합니다.om.docker.network.bridge.name
: 사용할 다리 이름(예: br0
을 지정합니다.$ docker network create \
-d bridge \
--subnet 10.1.1.0/24 \
--gateway 10.1.1.2 \
-o 'com.docker.network.bridge.enable_icc=true' \
-o 'com.docker.network.bridge.enable_ip_masquerade=false' \
-o 'com.docker.network.bridge.host_binding_ipv4=0.0.0.0' \
-o 'com.docker.network.bridge.name=br0' \
-o 'com.docker.network.driver.mtu=1500' \
br0_network
$ docker network create \
-d bridge \
--subnet 172.16.1.0/24 \
--gateway 172.16.1.2 \
-o 'com.docker.network.bridge.enable_icc=true' \
-o 'com.docker.network.bridge.enable_ip_masquerade=false' \
-o 'com.docker.network.bridge.host_binding_ipv4=0.0.0.0' \
-o 'com.docker.network.bridge.name=br1' \
-o 'com.docker.network.driver.mtu=1500' \
br1_network
Docker 컨테이너에 네트워크 연결
docker run
의--network
옵션은 연결할 네트워크만 지정할 수 있습니다.따라서
create
용기를 만들고 두 개의 네트워크를 연결한 다음 start
시작합니다.$ docker create -t --name ubuntu ubuntu:16.04 /bin/bash
$ docker network connect --ip 10.1.1.3 br0_network ubuntu
$ docker network connect --ip 172.16.1.3 br1_network ubuntu
$ docker start -a ubuntu
주의사항
기울기 모드 정보
교환기 단자network create — Docker-docs-ja 1.13.RC 문서의 대책으로 용기에서 온 데이터 패키지가 버려질 수 있다.
컨테이너의 NIC와 브리지의 NIC의 MAC 주소가 다르기 때문에 필터링됩니다.
이번에 ESXi에 VM을 구축했는데 무차별 모드와 위장 전송이 거부돼서...
(이른바 전조 모드라고 불리는 기능은 효과가 필요한 것 같다.)
docker0 네트워크 정보
이미지를 구축할 때docker0을 사용하지만 패키지 다운로드 등에서 네트워크 소통이 필요합니다.
그러나 생성
br0_network
후 Docker의 네트워크 격리 기능으로 인해 docker0
및 br0
간 소통이 불가능합니다.br1
도 마찬가지로 인터넷을 사용할 수 없습니다. 주의하십시오.(이미지를 구축할 때 br0_network와 br1_network를 만들지 않고 서버를 따로 구축합니다.)
$ sudo iptables -vL | grep -A4 'Chain DOCKER-ISOLATION'
Chain DOCKER-ISOLATION (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- docker0 br0 anywhere anywhere
0 0 DROP all -- br0 docker0 anywhere anywhere
0 0 RETURN all -- any any anywhere anywhere
참고 문헌
Reference
이 문제에 관하여(Ubuntu16.04에서 Docker 컨테이너에 여러 NIC 브리지 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hiconyan/items/b4015fa174d333c060a9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)