Docker는 개발자와 운영자가 애플리케이션을 더 쉽게 생성, 배포 및 실행할 수 있게 해주는 인기 있는 오픈 소스 컨테이너화 플랫폼입니다. Docker는 단일 호스트에서 여러 가상 컨테이너를 실행하여 격리를 달성합니다. 각 컨테이너는 서로 다른 애플리케이션이나 서비스를 실행할 수 있습니다.
그러나 때때로 다음과 같은 문제가 발생합니다. 여러 Docker 컨테이너가 동일한 호스트에 배포되고 컨테이너가 서로 액세스할 수 없습니다. 이는 컨테이너 간의 통신이 애플리케이션의 정상적인 작동의 핵심이기 때문에 개발 및 운영 및 유지 관리 담당자에게는 매우 번거로운 작업입니다.
이 글에서는 Docker 컨테이너가 서로 통신할 수 없는 이유에 대해 논의하고 솔루션을 제공합니다.
각 Docker 컨테이너에는 기본적으로 IP 주소가 할당되며, 이 IP 주소는 호스트 시스템에서만 액세스할 수 있습니다. 여러 컨테이너에 동일한 IP 주소가 할당되면 컨테이너는 서로 액세스할 수 없습니다. 이때 컨테이너의 네트워크 주소를 재구성해야 합니다.
먼저 docker network ls 명령을 사용하여 Docker의 네트워크 구성을 볼 수 있습니다. 예를 들어, 다음 명령을 사용하여 기본 네트워크의 정보를 볼 수 있습니다:
$ docker network ls
다음으로 docker network Inspection 명령을 사용하여 컨테이너의 네트워크 구성을 볼 수 있습니다. 예:
$ docker network inspect bridge
컨테이너의 네트워크 구성에 문제가 있으면 컨테이너를 다시 시작하고 다음 명령을 사용하여 IP 주소를 지정할 수 있습니다.
$ docker run -itd --name mycontainer1 --network mynetwork --ip 172.18.0.10 myimage
이 명령에서는 컨테이너의 이름, 네트워크 이름 및 IP 주소를 지정합니다.
Docker 컨테이너가 서로 액세스할 수 없는 또 다른 이유는 보안 그룹이 올바르게 구성되지 않았기 때문입니다. 보안 그룹은 컨테이너에 들어오고 나가는 네트워크 트래픽을 제어하는 가상 방화벽입니다. 컨테이너의 보안 그룹 규칙이 다른 컨테이너의 액세스를 허용하지 않으면 컨테이너는 서로 액세스할 수 없습니다.
Docker의 네트워크 설정을 사용하여 보안 그룹 규칙을 구성할 수 있습니다. 예를 들어 다음 명령을 사용하여 새 네트워크를 만들고 컨테이너 간의 통신 규칙을 지정할 수 있습니다.
$ docker network create --subnet 172.18.0.0/16 mynetwork
이 명령에서는 mynetwork라는 새 네트워크를 만들고 네트워크의 하위 네트워크를 지정합니다.
다음으로 docker run 명령을 사용하여 컨테이너를 시작하고 네트워크에 추가할 수 있습니다. 예를 들어 다음 명령을 사용하여 두 개의 컨테이너를 시작하고 이를 mynetwork 네트워크에 추가할 수 있습니다.
$ docker run -d --name mycontainer1 --network mynetwork --ip 172.18.0.2 myimage $ docker run -d --name mycontainer2 --network mynetwork --ip 172.18.0.3 myimage
이 명령에서는 각각 두 개의 컨테이너를 시작하고 이를 mynetwork 네트워크에 할당합니다. 서로 통신할 수 있도록 각 컨테이너의 IP 주소를 지정합니다.
마지막으로 iptables 명령을 사용하여 보안 그룹 규칙을 구성할 수 있습니다. 예:
$ iptables -I DOCKER-USER -i mynetwork ! -s 172.18.0.0/16 -d 172.18.0.0/16 -j DROP
이 명령에서는 다른 네트워크가 mynetwork 네트워크의 컨테이너에 액세스하는 것을 방지하는 규칙을 지정합니다. 이런 방식으로 컨테이너 간의 통신이 안전한지 확인할 수 있습니다.
우리는 Docker 컨테이너가 컨테이너 이름과 IP 주소를 통해 서로 액세스할 수 있다는 것을 알고 있습니다. 그러나 컨테이너 이름을 IP 주소로 확인할 수 없는 경우 컨테이너는 서로 액세스할 수 없습니다.
이번에는 Docker의 DNS 서버를 구성해야 합니다. Docker는 기본 Google DNS 서버를 사용하여 도메인 이름을 확인하지만 다른 DNS 서버도 사용할 수 있습니다.
Docker의 DNS 서버를 구성하려면 Docker의 daemon.json 파일을 편집하면 됩니다. 예를 들어 Linux 시스템에서는 다음 명령을 사용하여 이 파일을 열 수 있습니다.
$ sudo vi /etc/docker/daemon.json
이 파일에서 Docker의 DNS 서버를 지정할 수 있습니다. 예:
{ "dns": ["8.8.8.8", "8.8.4.4"] }
이 구성에서는 Google의 DNS 서버인 두 개의 DNS 서버를 지정합니다.
완료 후 Docker 서비스를 다시 시작하여 구성을 적용할 수 있습니다.
$ sudo systemctl restart docker
이제 Docker 컨테이너 이름을 사용하여 다른 컨테이너에 액세스할 수 있습니다.
결론
Docker 컨테이너가 서로 통신하지 못하는 문제는 컨테이너 네트워크 구성, 보안 그룹 구성 또는 DNS 구성에 문제가 있을 수 있습니다. 이러한 구성을 확인하고 필요한 사항을 변경하면 이 문제를 쉽게 해결할 수 있습니다.
위 내용은 Docker 컨테이너가 서로 통신할 수 없으면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!