현재 클라우드 컴퓨팅 및 컨테이너화의 물결 속에서 Docker는 주류 애플리케이션 컨테이너화 기술로 부상했으며 운영, 유지 관리 및 개발 분야에서 가장 널리 사용되는 도구 중 하나가 되었습니다. 이러한 맥락에서 Docker 오프라인 설치는 매우 일반적인 요구 사항이 되었습니다. 많은 사용자가 인터넷에 연결할 수 없거나 보안 및 기타 요인으로 인해 인터넷 연결이 금지되어 있기 때문에 오프라인 설치는 가장 편리한 설치 방법 중 하나가 되었습니다. 하지만 도커의 오프라인 설치 과정에서 설치는 성공하지만 시동이 실패하는 경우가 많아 초보자에게는 매우 골치 아픈 문제이다.
이 글에서는 실제 동작부터 시작하여 Docker 오프라인 설치 방법을 소개하고, 시작 실패에 대한 자세한 분석을 진행하여 자세한 가이드를 제공하겠습니다.
1. Docker 오프라인 설치
Docker 오프라인 설치 방법에는 두 가지가 있습니다. 하나는 Docker 바이너리 파일을 다운로드하여 설치하는 것이고, 다른 하나는 yum 소스를 구성하여 설치하는 것입니다. 전자는 주로 네트워크 조건이 없는 서버에 적합한 반면, 후자는 Linux 개발 환경의 오프라인 설치에 적합합니다.
1. Docker 바이너리 파일을 다운로드하여 설치
이 방법의 원리는 비교적 간단합니다. 즉, Docker 바이너리 파일을 로컬에 다운로드한 후 설치하는 것입니다. 구체적인 단계는 다음과 같습니다.
1.1 Docker 바이너리 파일 얻기
공식 웹사이트 https://www.docker.com/에서 해당 버전의 Docker 바이너리 파일을 다운로드합니다. 다운로드 시 현재 운영체제에 대한 정보를 알아야 하며, centos 시스템의 경우 다음 주소에 해당하는 바이너리 파일을 선택하여 다운로드할 수 있습니다.
https://download.docker.com/linux/static/stable/x86_64/ docker-version number.tgz
1.2 Docker 바이너리 파일 설치
설치 시 다운로드한 바이너리 파일의 압축을 풀고 압축을 풀어야 합니다. docker 및 dockerd 파일을 /usr/bin 디렉터리로 이동합니다.
tar -xvf docker-version number.tgz
cp docker/* /usr/bin
2. yum 소스를 구성하여 설치
centos 시스템에서는 yum 소스를 구성하여 오프라인으로 Docker를 설치할 수 있습니다. 구체적인 단계는 다음과 같습니다.
2.1 Docker의 yum 소스를 구합니다
공식 웹사이트 https://www.docker.com/에서 해당 버전의 Docker 설치 패키지를 다운로드합니다. 다운로드 시에는 현재 운영 체제에 대한 정보를 알고 있어야 하며, 시스템 버전에 해당하는 rpm 패키지를 다운로드해야 합니다.
2.2 새 로컬 yum 소스 만들기
로컬에서 새 yum 소스 디렉터리를 만들고 다운로드한 Docker 설치 패키지를 이 디렉터리에 복사한 다음 createrepo 명령
mkdir /var/docker
cp docker-ce *를 통해 디렉터리를 만듭니다. .rpm /var/docker
createrepo /var/docker
2.3 yum 소스 구성
/etc/yum.repos.d 디렉터리에 새 repo 파일을 생성하고 다음 내용을 작성합니다
[docker-local]
이름 =Docker Local repo
baseurl=file:///var/docker
enabled=1
gpgcheck=0
2.4 Docker 설치
다음 명령을 실행하여 Docker
yum install docker-ce
2를 설치하세요. 해결책
1. 문제 설명
위의 Docker 오프라인 설치를 완료한 후 다음 오류와 함께 Docker를 시작하지 못할 수 있습니다.
$ sudo systemctl start docker
제어 프로세스가 종료되어 docker.service에 대한 작업이 실패했습니다.
자세한 내용은 "systemctl status docker.service" 및 "journalctl -xe"를 참조하세요.
systemctl status docker.service 명령을 실행하면 시작 실패의 원인이 docker.service 파일의 "ExecStart"임을 알 수 있습니다. "명령을 성공적으로 실행하지 못했습니다.
$ sudo systemctl status docker.service
...
Apr 30 07:40:32 localhost.localdomain systemd[1]: Docker 애플리케이션 컨테이너 엔진을 시작했습니다.
Apr 30 07:40: 32 localhost .localdomain systemd[1]: docker.service: 기본 프로세스 종료, 코드=종료, 상태=1/FAILURE
Apr 30 07:40:32 localhost.localdomain systemd[1]: 장치 docker.service가 실패 상태로 전환되었습니다.
4월 30일 07:40:32 localhost.localdomain systemd[1]: docker.service가 실패했습니다.
4월 30일 07:40:32 localhost.localdomain systemd[1]: docker.service 보류 시간이 초과되어 일정이 다시 시작됩니다.
4월 30일 07: 40:32 localhost.localdomain systemd[1]: Docker 애플리케이션 컨테이너 엔진이 중지되었습니다.
$sudo Journalctl -xe
dockerd-current[14552]: time="2020-04-30T07:40:32.652790118+08:00 " level =error msg="systemd 알리미 실패: systemd 모듈 "libsystemd.so"를 로드할 수 없습니다: 공유를 열 수 없습니다 o
dockerd-current[14552]: 데몬 시작 실패: 네트워크 컨트롤러 초기화 오류: 브리지 주소 목록 실패: Pre DefinedLocalScopeDefaultNetworks 목록 실패: 사전 정의된
dockerd-current[14552]: 데몬 시작 오류: 네트워크 컨트롤러 초기화 오류: 브리지 주소 목록 실패: PredefineLocalScopeDefaultNetworks 목록 실패: 사전 정의된
systemd[1]: docker.service: 기본 프로세스 종료, 코드=종료, 상태 =1 /FAILURE
systemd[1]: Docker Application Container Engine을 시작하지 못했습니다.
systemd[1]: 장치 docker.service가 실패 상태로 전환되었습니다.
systemd[1]: docker.service가 실패했습니다.
2.
위 오류 메시지를 통해 Docker가 시작되지 않는 이유는 Docker의 네트워크 컨트롤러를 시작할 수 없기 때문임을 알 수 있습니다. 구체적으로는 Docker의 네트워크 컨트롤러가 iptables 방화벽을 통해 컨테이너 네트워크를 관리하는데, 방화벽은 기본적으로 로컬이 아닌 트래픽을 모두 금지하기 때문입니다. Docker의 경우 처음 시작하면 관련 규칙이 iptables에 자동으로 추가됩니다. 그러나 오프라인으로 설치된 Docker를 처음 시작하면 규칙 추가가 실패하여 네트워크 컨트롤러가 시작되지 않습니다. 구체적인 표현은 사용자가 Docker를 시작할 때 Docker가 로컬 IP 주소를 기반으로 docker0이라는 브리지를 자동으로 생성한다는 것입니다. 이 작업이 실패하면 Docker가 시작될 수 없습니다.
3. 문제 해결
이 문제를 해결하는 두 가지 주요 방법이 있습니다.
3.1 docker0 브리지 생성
docker0 브리지를 수동으로 생성하면 이 문제를 해결할 수 있습니다. centos에서는 다음 명령을 실행하여 docker0 네트워크 브리지를 수동으로 생성할 수 있습니다. :
sudo ip link add name docker0 type bridge
sudo ip addr add dev docker0 172.17.0.1/16
sudo ip link set dev docker0 up
위 작업을 완료한 후 Docker를 다시 시작하고 관리자 권한으로 다음 명령을 실행하세요. :
$ sudo systemctl start docker
를 사용하여 Docker 시작을 완료합니다.
3.2 방화벽 규칙 수정
방화벽을 끄거나 방화벽 규칙을 수정하는 것도 이 문제를 해결하는 효과적인 방법입니다. 방화벽을 끄는 경우 다음 명령을 사용할 수 있습니다.
$ systemctl stop Firewalld
$ systemctl 비활성화 Firewalld
그러나 이러한 상황은 보안 요구 사항에 따라 시스템의 방화벽을 최대한 유지하는 것이 좋습니다. .
iptables 규칙을 수정하려면 다음 명령을 통해 규칙을 추가할 수 있습니다.
$ sudo iptables -P FORWARD ACCEPT
$ sudo iptables -I FORWARD -j ACCEPT
$ sudo service iptables save
수행 후 위 작업을 다시 시작하면 Docker가 정상적으로 시작할 수 있습니다.
3. 요약
본 글의 소개를 통해 Docker를 오프라인으로 설치하는 경우 네트워크 문제로 인해 Docker가 시작되지 않을 수 있음을 알 수 있습니다. 현재 Docker의 네트워크 컨트롤러의 작동 원리를 이해하고 이를 수동으로 구성하거나 iptables 방화벽을 특정 수정하여 Docker 시작 실패 문제를 최종적으로 해결해야 합니다. 물론 특정 오류 메시지를 적시에 확인하고 분석을 수행함으로써 이러한 문제를 해결할 수도 있습니다.
따라서 Docker를 오프라인으로 설치하고 시작하는 동안 주의와 인내심을 갖고 계속 실험하고 디버그하여 마침내 문제를 해결하는 데 적합한 방법을 찾아야 합니다.
위 내용은 Docker 오프라인 설치를 시작하지 못했습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!