기계적 인조 인간

도커 컨테이너에 연결하는 방법

아폴론 징글벨락

아폴론 징글벨락

차례:

Anonim

실행중인 Docker 컨테이너에 연결하면 컨테이너 내부에서 무슨 일이 일어나고 있는지 확인할 때 도움이됩니다. Docker 컨테이너가 예상대로 작동하지 않으면 컨테이너에 연결하거나 컨테이너에 쉘을 가져 와서 ps 또는 top 과 같은 명령을 실행할 수 있습니다. 컨테이너에 들어가서 새 패키지를 설치하고 새 Docker 이미지를 만들 수도 있습니다.

이 튜토리얼에서는 컨테이너의 기본 실행 프로세스에 연결하는 방법과 실행중인 컨테이너에 셸을 얻는 방법을 설명합니다.

컨테이너에 부착

컨테이너에서 여러 프로세스를 실행할 수 있지만 대부분의 도커 컨테이너는 단일 프로세스 만 실행합니다. 컨테이너를 시작할 때 실행되는 명령은 ENTRYPOINT 및 / 또는 RUN 명령을 사용하여 지정됩니다.

docker attach 명령을 사용하면 터미널을 실행중인 컨테이너에 연결할 수 있습니다. 이는 표준 출력으로 작성된 내용을 실시간으로 보거나 프로세스를 대화식으로 제어하려는 경우에 유용합니다.

attach 명령이 어떻게 작동하는지 더 잘 이해하기 위해 공식 Nginx 이미지를 사용하여 분리 된 새로운 Nginx 컨테이너를 실행 해 봅시다.

docker container run --name my_nginx -d -p 8080:80 nginx

-p 8080:80 옵션은 Docker에게 컨테이너의 포트 8080을 호스트 시스템의 포트 80에 바인딩하도록 지시합니다.

“my_nginx”컨테이너가 실행 중인지 확인하기 위해 컨테이너를 나열하십시오.

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e1c4974a8d8 nginx "nginx -g 'daemon of…" 3 minutes ago Up 2 seconds 0.0.0.0:8080->80/tcp my_nginx

컨테이너의 ID 또는 이름을 사용하여 컨테이너에 연결하십시오.

docker container attach my_nginx

컨테이너를 실행할 때 실행되는 nginx 이미지의 기본 명령은 CMD 로 설정됩니다. attach 명령을 실행하면 터미널이 nginx 프로세스에 연결됩니다.

브라우저에서 127.0.0.1:8080 을 열고 nginx 프로세스의 출력을 실시간으로 볼 수 있습니다.

192.168.33.1 - - "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-" 192.168.33.1 - - "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.71:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"

컨테이너 로그에 액세스하려면 docker logs 명령을 사용하는 것이 좋습니다.

컨테이너를 멈추지 않고 컨테이너에서 분리하려면 CTRL-p CTRL-q 키 조합을 사용하십시오. CTRL-c 누르면 컨테이너가 중지됩니다.

연결중인 실행중인 프로세스가 입력을 승인하면 명령을 보낼 수 있습니다.

컨테이너에 쉘 가져 오기

docker exec 명령을 사용하면 실행중인 컨테이너 내에서 명령을 실행할 수 있습니다.

exec 명령이 작동하는 방식과 컨테이너 쉘을 입력하는 데 사용되는 방법을 보려면 먼저 새 컨테이너를 시작하십시오. 공식 MySQL 이미지를 사용합니다:

docker container run --name my_mysql -d mysql

“my_mysql”이라는 컨테이너가 생성됩니다.

컨테이너 내에서 명령을 실행하려면 다음 명령을 실행하십시오.

docker container exec -it my_mysql ls /var

-i 옵션은 대화식을 나타내며 -t 는 Docker에게 의사 TTY 장치를 할당하도록 지시합니다. ls 명령은 컨테이너의 /var 디렉토리에있는 모든 파일과 디렉토리를 나열합니다.

backups cache lib local lock log mail opt run spool tmp

컨테이너에 쉘을 가져 오려면, 즉 컨테이너 내부에 들어가려면 쉘 바이너리를 실행하여 새 쉘 세션을 시작하십시오. sh , bash 또는 이미지에 포함 된 다른 쉘을 사용할 수 있습니다.

아래 명령은 컨테이너 내에 새 Bash 세션을 만듭니다.

docker container exec -it my_mysql /bin/bash

명령 프롬프트가 변경되어 컨테이너 셸에서 작업 중임을 나타냅니다.

여기에서 다른 Linux 서버에서와 동일한 방식으로 명령을 실행할 수 있습니다. 예를 들어, 현재 환경 변수 목록을 얻으려면 env :

env

결과는 다음과 같습니다.

HOSTNAME=e0214d97e0fe MYSQL_ROOT_PASSWORD=my-secret-pw PWD=/ HOME=/root MYSQL_MAJOR=8.0 GOSU_VERSION=1.7 MYSQL_VERSION=8.0.17-1debian9 TERM=xterm SHLVL=1 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env

결론

docker exec docker attach 명령을 사용하면 실행중인 컨테이너에 연결할 수 있습니다. 컨테이너에 대화식 쉘을 가져 오려면 exec 명령을 사용하여 새 쉘 세션을 시작하십시오. attach 명령은 터미널을 실행중인 컨테이너에 연결합니다.

도커