컨테이너가 호스트 도커를 사용할 때 오류를 해결하는 방법
최근 몇 년 동안 Docker는 효율적인 컨테이너화 솔루션으로 점점 인기를 얻고 있습니다. 그러나 컨테이너화된 배포를 위해 Docker를 사용할 때 몇 가지 문제가 발생합니다. 예를 들어 컨테이너 내부의 호스트에 액세스하면 컨테이너는 호스트 Docker를 사용하여 오류를 보고합니다. 이 문서에서는 이 문제의 원인과 해결 방법에 대해 설명합니다.
문제 설명
Docker를 사용하여 애플리케이션을 배포할 때 컨테이너 내부에서 호스트 파일 시스템이나 호스트의 Docker 데몬에 액세스해야 하는 경우가 있습니다. 일반적으로 컨테이너 매개변수를 시작할 때 -v /:/host
및 -v /var/run/docker.sock:/var/run/docker.sock
를 추가하여 이 기능을 달성하십시오. 그러나 경우에 따라 컨테이너가 호스트 Docker 데몬에 액세스하려고 하면 다음과 유사한 오류 메시지가 나타납니다. -v /:/host
和 -v /var/run/docker.sock:/var/run/docker.sock
参数来实现这一功能。但是在某些情况下,当容器尝试访问宿主机 Docker daemon 时,会出现类似以下错误的信息:
FATA[0000] Post http:///var/run/docker.sock/v1.18/containers/create: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
这是因为容器中的进程在寻找 Docker daemon 的进程时,会先尝试在容器内部的 /var/run/docker.sock
目录下寻找,而该目录在容器内部是不存在的,于是就会导致该错误的出现。
解决方法
方法一:使用 --privileged
参数
在启动容器时,使用 --privileged
参数可以让容器拥有宿主机的所有权限,包括访问 Docker daemon。但是使用该方式会让容器获得更高的权限,安全风险较大,因此建议慎重使用。
docker run --privileged -v /:/host -v /var/run/docker.sock:/var/run/docker.sock <image>
方法二:使用环境变量
在启动容器时,可以使用环境变量来指定 Docker daemon 的地址,从而避免容器在 /var/run/docker.sock
上寻找 Docker daemon 的进程。
docker run -v /:/host -e DOCKER_HOST=unix:///host/var/run/docker.sock <image>
方法三:换用 TCP 连接方式
不使用 Unix Socket 而使用 TCP 连接的方式也可以解决这个问题。需要在启动 Docker daemon 时添加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
参数,然后在容器中使用 DOCKER_HOST
环境变量来指定使用 TCP 连接 Docker daemon。
docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock docker run -e DOCKER_HOST=172.xx.xx.xx:2375 <image>
结论
容器使用宿主 Docker 报错的问题是由于容器中进程在寻找 Docker daemon 的进程时的路径问题导致的。本文介绍了三种解决方法:使用 --privileged
rrreee
/var/run/docker.sock
디렉터리에서 검색해 보았는데, 이 디렉터리가 컨테이너 내부에 존재하지 않기 때문에 이런 오류가 발생합니다. 🎜🎜해결책🎜방법 1: --privileged
매개변수 사용
🎜컨테이너를 시작할 때 --privileged
매개변수를 사용하여 컨테이너 허용 Docker 데몬에 대한 액세스를 포함하여 호스트의 모든 권한을 갖습니다. 하지만 이 방법을 사용하면 컨테이너가 더 높은 권한을 얻을 수 있어 보안 위험이 더 커질 수 있으므로 주의해서 사용하는 것이 좋습니다. 🎜rrreee방법 2: 환경 변수 사용
🎜컨테이너를 시작할 때 환경 변수를 사용하여 Docker 데몬의 주소를 지정하면 컨테이너가/var/run/docker에 있는 것을 방지할 수 있습니다. .sock
Docker 데몬의 프로세스를 찾습니다. 🎜rrreee방법 3: TCP 연결로 전환
🎜Unix 소켓 대신 TCP 연결을 사용하면 이 문제를 해결할 수도 있습니다. Docker 데몬을 시작할 때-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
매개변수를 추가한 후 를 사용해야 합니다. 컨테이너
환경 변수의 DOCKER_HOST를 사용하여 Docker 데몬에 연결하기 위해 TCP 사용을 지정합니다. 🎜rrreee🎜결론🎜🎜컨테이너가 호스트 Docker를 사용할 때 보고되는 오류는 컨테이너 내의 프로세스가 Docker 데몬 프로세스를 찾을 때 경로 문제로 인해 발생합니다. 이 문서에서는 --privileged
매개변수 사용, 환경 변수 사용, Docker 데몬의 연결 방법 변경 등 세 가지 솔루션을 설명합니다. 이 문제는 실제 상황에 따라 적절한 방법을 선택하면 쉽게 해결할 수 있습니다. 🎜위 내용은 컨테이너가 호스트 도커를 사용할 때 오류를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Dockercanbeinstalledonamacusingdockerdesktopbofollowingthesesteps : 1. VerifyyourmacmeetstheRequirements —Macos10.15ornewer, Intel OrappleSiliconchip, Atleast4gbram, and virtualizationEnabled; 2.DownloadDockerDeskTopfrffffromhttps : //www.docker.com/products/docker-d

onwindows, Unstalldockerdesktopviasettings → apps, thenremoveleftoverfilesinwslwithsudorm-rf/var/lib/docker.onmacos, quitdocke RDESKTOP, MIPTOCKER.APPTOTRASH, andDELETECONFIGURATIONFILESFR ~/LIBRAL.3.ONUBUNTU/DEBIAN, STOPTHESVICE, PURGEDOCKERPACKAGESW

TobackupadockerContainerwithitsData, FirstBackUpnameDvolumesUsingAtemPoraryContainerToCreateRateAtarballofThevolUcontents.2.next, preservethecontainerconfigurationByExportItwithDockerInspector, 바람직하게는 BydefiningInitInAdockerCompypile.3.3.3

DockERCP 명령을 사용하여 컨테이너를 실행할 필요없이 호스트에서 Docker 컨테이너로 파일을 복사하십시오. 2. 컨테이너가 존재하는지 확인하고 dockercp/path/on/hostfile.txtContainer-name :/path/in/container를 실행하십시오. 3. 대상 디렉토리가 존재하지 않으면 먼저 만들어야합니다. 전체 폴더를 복사 할 때는 컨텐츠가 재귀 적으로 복사됩니다. 작업이 완료되면 이미지를 재건하거나 볼륨을 장착하지 않고 컨테이너에서 파일을 사용할 수 있습니다.

Docker 컨테이너에서 GUI 애플리케이션을 실행하려면 호스트 디스플레이 서비스를 공유하고 권한을 올바르게 구성해야합니다. 1. XHOST LOCAL 실행 : 컨테이너가 X11에 액세스 할 수 있도록 Linux에서 Docker; 2. 컨테이너를 시작할 때 mount /tmp/.x11-unix 및 디스플레이 환경 변수; 3. X11 관련 종속성이 거울에 설치되어 있는지 확인하십시오. 4. 선택적으로 GPU, 오디오 및 입력 장치 지원을 추가합니다. 5. 또는 VNC/NOVNC 솔루션을 사용하여 크로스 플랫폼 보안 액세스를 달성하십시오. 6. MacOS는 Xquartz를 설치하고 디스플레이를 호스트 IP로 설정해야합니다. 7. Windows는 WSL2를 통해 VCXSRV 및 기타 X 서버와 협력하고 WSL2를 통해 디스플레이를 구성하고 디스플레이를 구성하고 VCXSRV 및 기타 X 서버를 사용하고 디스플레이를 구성해야합니다.

DockerCompose가 비정상적으로 동작하면 먼저 로그를 확인하여 문제의 근본 원인을 찾은 다음 구성 파일이 올바른지 확인하고 마지막으로 서비스를 깨끗하게 재건하려고합니다. 1. Docker -Composelogs를 사용하여 전체 또는 지정된 서비스의 로그 출력을보고 -꼬리 및 -f 매개 변수를 결합하여 문제 해결 효율을 향상시킵니다. 2. Docker-ComposeConfig를 통해 Yaml 파일 구문 및 구성 항목을 확인하고 종속성, 포트 매핑 및 환경 변수와 같은 주요 설정을 확인하십시오. 3. Docker-Compedown 및 Docker-Composeup-Build를 실행하여 서비스를 재건하고, 필요한 경우 이전 데이터를 지우려면 -v를 추가하거나, 문제 서비스를 개별적으로 시작하십시오.

Dockerswarm에 응용 프로그램을 배포하는 핵심은 독립형 컨테이너 대신 서비스를 사용하고 내장 도구를 통해 구성, 키 및 롤링 업데이트를 관리하는 것입니다. 1. 먼저, 응용 프로그램을 컨테이너화하고이를 스와 암 노드에 액세스 할 수있는 거울 저장소로 푸시하십시오. 2. DockerserviceCreate를 사용하여 서비스 및 복제 수, 포트 매핑 등과 같은 예상 상태를 정의하십시오. 3. DockersEcret 및 DockerConfig를 사용하여 각각 민감한 정보 및 비 민감한 구성을 관리하고 서비스에서 참조하십시오. 4. DockerservicesCale을 사용하여 스케일링을 달성하고 DockerserviceUpdate를 사용하여 중단 된 버전 업데이트를 수행하며 매개 변수를 통해 업데이트 정책을 제어 할 수 있습니다.

Docker 컨테이너의 리소스 사용량을 제한하려면 컨테이너를 실행할 때 명령 줄 매개 변수를 통해 CPU 및 메모리 제한을 지정할 수 있습니다. 특정 방법은 다음과 같습니다. 1. -memory = "512m"과 같은 메모리 상한을 설정하기 위해 -memory (또는 -m)를 사용합니다. 한계는 512MB RAM임을 의미합니다. 2. -Memory-Swap을 사용하여-Memory-Swap = "1G"와 같은 총 메모리 + 스왑 공간을 설정하면 총 1GB를 의미합니다. 3. -cpus를 사용하여 -cpus = "1.5"와 같은 CPU 코어의 수를 제한한다는 것은 최대 1.5 CPU 코어가 사용됨을 의미합니다. 4. -cpu-s를 사용하십시오
