대한 docker-compose
컨테이너 사이에 사용 승인 된 솔루션을 개인 네트워크를 만들 브리지 네트워킹을 사용 docker0
하지 않습니다 일 컨테이너에서 출구 인터페이스가 없기 때문에 docker0
대신은 임의로 생성 된 인터페이스 ID가 같은있다 :
$ ifconfig
br-02d7f5ba5a51: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.32.1 netmask 255.255.240.0 broadcast 192.168.47.255
불행하게도, 임의의 ID는 예측할 수 없으며, 작성시 네트워크를 재 작성해야 할 때마다 변경됩니다 (예 : 호스트 재부팅시). 이것에 대한 나의 해결책은 알려진 서브넷에서 개인 네트워크를 만들고 iptables
해당 범위를 허용 하도록 구성 하는 것입니다.
파일 스 니펫 작성 :
version: "3.7"
services:
mongodb:
image: mongo:4.2.2
networks:
- mynet
# rest of service config and other services removed for clarity
networks:
mynet:
name: mynet
ipam:
driver: default
config:
- subnet: "192.168.32.0/20"
환경에 필요한 경우 서브넷을 변경할 수 있습니다. 나는 기본적으로 생성 된 것을보기 위해을 192.168.32.0/20
사용하여 임의로 선택 했습니다 docker network inspect
.
iptables
프라이빗 서브넷을 소스로 허용하도록 호스트에서 구성 하십시오.
$ iptables -I INPUT 1 -s 192.168.32.0/20 -j ACCEPT
이것이 가장 간단한 iptables
규칙입니다. 대상 포트와 같은 다른 제한을 추가 할 수 있습니다. iptables 규칙이 만족할 때 규칙을 유지하는 것을 잊지 마십시오.
이 방법은 반복 가능하므로 자동화 할 수 있다는 장점이 있습니다. ansible의 template
모듈을 사용 하여 변수 대체로 작성 파일을 배포 한 다음 iptables
및 shell
모듈을 사용하여 각각 방화벽 규칙을 구성하고 유지합니다.