우분투 VM이 내부 IP를 도커 이미지로 반환

우분투 VM이 내부 IP를 도커 이미지로 반환

물리적 호스트의 멀티패스에서 실행되는 도커 이미지가 있습니다. 도커 컨테이너가 물리적 호스트에서 실행되는 서비스에 연결을 시도하고 있습니다. 그러나 DNS 확인은 docker에게 IP 주소가 임을 알려줍니다 127.0.1.1. 공개 주소가 필요할 때 VM의 DNS 조회가 로컬 IP 주소를 반환한다고 생각합니다.

physical host: culsu (ubuntu 18.04)
    multipass host: promlife (ip: 10.13.31.13) (ubuntu 22.04)
        docker container: prometheus (ip: 172.18.0.9)
            dns lookup of promlife: 127.0.1.1

promlifeDNS 서버가 반환 되면 문제가 해결될 수 있다고 생각합니다.10.13.31.13

실제 머신에서:

$ ping promlife
PING promLife (10.13.31.13) 56(84) bytes of data.

promlife vm에서:

$ ping promlife
PING promlife (127.0.1.1) 56(85) bytes of data.

도커 컨테이너에서 다음을 수행합니다.

$ ping promlife
PING promlife (127.0.1.1) 56(85) bytes of data.

프로메테우스가 가상 호스트를 해결하도록 하려면 무엇을 변경해야 하는지에 대해 생각하는 사람이 있나요?

문제가 잠재적으로 systemd-resolvd와 관련되어 있습니까?

당신의 도움을 주셔서 감사합니다!

답변1

주소 127.0.1.1은 에서 "이름별" 주소로 Linux 호스트가 설정한 주소입니다 /etc/hosts. 실행하거나 pingPOSIX 이름 확인을 사용하는 다른 항목을 실행하면 nsswitch라이브러리를 사용하여 파일을 보고 /etc/hosts정규화되지 않은 이름의 의미를 찾습니다.

컨테이너 내부에서 왜 그렇게 하는지 잘 모르겠습니다. 어떻게든 호스트 nsswitch라이브러리로 오프로드됩니다. 어쩌면 Docker일 수도 있습니다.

어쨌든, Docker 컨테이너 내에서 Docker 호스트에 액세스하려는 경우 올바른 방법은 docker가 컨테이너의 로컬 네트워크에 있는 Docker 호스트의 IP 주소를 자동으로 확인하는 특수 호스트 이름을 사용하는 것입니다 host.docker.internal.

시도해 보세요: ping host.docker.internal컨테이너 내에서.

답변2

DNS 구성을 업데이트해야 합니다.유흥을 사용하면 /etc/netplan/netcfg.yaml 파일을 편집할 수 있습니다. 수정하다네임서버필드를 사용하여 기본 DNS 서버를 가리킵니다.

network:
  version: 2
  ethernets:
    ens: 
      addresses: [10.13.31.13/24] # Your IP configuration
      gateway4: 10.13.31.1 # Your gateway
      nameservers:
        addresses: [8.8.8.8]  

구성을 업데이트한 후 적용합니다.
sudo netplan apply
다시 시작시스템 해결변경 사항이 적용되었는지 확인하는 서비스입니다.
sudo systemctl restart systemd-resolved

관련 정보