TCP를 통해 클라이언트에서 원격 호스트로 도커 데몬을 연결하려고하는데이 오류가 발생합니다.
docker -H tcp://{{HOST_IP}}:2375 ps
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
그 이유는 무엇일까요? 솔루션을 찾기위한 적절한 디버깅 접근 방식은 무엇입니까?
제가 한
호스트 :
systemctl edit docker.service
다음 줄을 추가하고 저장합니다.
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
데몬 다시로드 :
systemctl daemon-reload
Docker를 다시 시작하십시오.
systemctl restart docker.service
작동하는지 확인하십시오.
netstat -lntp | grep dockerd
결과:
tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Docker로 테스트 :
docker -H tcp://127.0.0.1:2375 ps
모든 것이 호스트에서 작동했습니다. 그러나 원격 호스트를 사용하여 클라이언트에서 연결하려고 할 때 오류가 발생합니다.
클라이언트에서 :
docker -H tcp://{{HOST_IP}}:2375 ps
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
ssh를 통한 연결이 작동합니다.
docker -H ssh://root@{{HOST_IP}} ps
Docker 데몬이 localhost 주소 127.0.0.1
. 원격 호스트에서 연결할 수 없습니다. 해당 주소에 연결할 수있는 유일한 호스트는 로컬 호스트입니다.
Docker 데몬이 원격 호스트의 연결을 수락하도록하려면 다음을 원할 것입니다.
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
즉, "모든 호스트의 연결 수신"을 의미합니다. 하지만 당신은하지 않습니다 정말 그 인증되지 않은 부여 것이기 때문에, 그것을 원하지 root
해당 포트에 연결할 수 있었다 사람에게 시스템에 대한 액세스를. iptables
특정 원격 호스트에 대한 액세스를 제한 하는 데 사용할 수 있지만 해당 호스트에 액세스 할 수있는 사람은 누구나 Docker 호스트에 대한 인증되지 않은 액세스를 갖게되므로 여전히 문제가 root
됩니다.
당신이 정말 하고 싶은 통해 읽기 "하는 것입니다 도커 데몬 소켓 보호 에 나와있는이 방법 도커 데몬에 대한 원격 연결에 대한 인증서 기반 인증을 설정하려면". 질문의 예와 달리 해당 문서에 설명 된 구성에서는 클라이언트가 SSL 인증서를 사용하여 인증해야합니다.
이것은 어디에서나 인증되지 않은 액세스를 허용하는 것보다 훨씬 더 안전하며 특정 호스트에서 인증되지 않은 액세스를 허용하는 것보다 다소 더 안전합니다 (파일 시스템 소유권과 권한을 사용하여 도커 데몬에 대한 액세스 권한을 부여하는 데 필요한 SSL 개인 키에 대한 액세스를 제한 할 수 있기 때문입니다). ).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다