development

Docker 컨테이너에 셸한 후 파일을 어떻게 편집합니까?

big-blog 2020. 2. 17. 22:20
반응형

Docker 컨테이너에 셸한 후 파일을 어떻게 편집합니까?


사용하여 Docker 컨테이너에 성공적으로 쉘했습니다.

docker exec -i -t 69f1711a205e bash

이제 파일을 편집해야하며 안에 편집기가 없습니다.

root@69f1711a205e:/# nano
bash: nano: command not found
root@69f1711a205e:/# pico
bash: pico: command not found
root@69f1711a205e:/# vi
bash: vi: command not found
root@69f1711a205e:/# vim
bash: vim: command not found
root@69f1711a205e:/# emacs
bash: emacs: command not found
root@69f1711a205e:/#

파일은 어떻게 편집합니까?


주석에서와 같이 기본 편집기 세트가 없습니다-이상합니다- $EDITOR환경 변수가 비어 있습니다. 다음을 사용하여 컨테이너에 로그인 할 수 있습니다.

docker exec -it <container> bash

그리고 다음을 실행하십시오.

apt-get update
apt-get install vim

또는 다음 Dockerfile을 사용하십시오.

FROM  confluent/postgres-bw:0.1

RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "vim"]

Docker 이미지는 최소한으로 트리밍되어 제공되므로 배송 된 컨테이너에 편집기가 설치되어 있지 않습니다. 그렇기 때문에 수동으로 설치해야합니다.

편집하다

또한 주제에 대한 게시물 을 읽는 것이 좋습니다 .


몇 가지 작은 변경 (예 : Tomcat 구성 변경)을 위해 편집기를 추가하지 않으려면 다음을 사용하십시오.

docker cp <container>:/path/to/file.ext .

로컬 컴퓨터 (현재 디렉토리)로 복사합니다. 그런 다음 즐겨 사용하는 편집기를 사용하여 파일을 로컬로 편집 한 다음

docker cp file.ext <container>:/path/to/file.ext

이전 파일을 대체하십시오.


cat설치된 경우 사용할 수 있으며 베어 / 원시 컨테이너가 아닌 경우에 해당됩니다. 그것은 꼬집음으로 작동하며 로컬로 적절한 편집기에 복사하여 붙여 넣을 때 좋습니다.

cat > file
# 1. type in your content
# 2. leave a newline at end of file
# 3. ctrl-c / (better: ctrl-d)
cat file

cat줄 바꿈을 수신하면 각 줄을 출력합니다. 마지막 줄에 줄 바꿈을 추가하십시오. ctrl-c는 SIGINT고양이가 정상적으로 종료되도록 for를 보냅니다 . 주석에서 ctrl-d를 눌러 파일 끝을 표시 할 수 있습니다 ( "입력이 더 이상 없음").

또 다른 옵션은 infilterptrace 마술과 함께 컨테이너 네임 스페이스에 프로세스를 주입하는 것과 같은 것 입니다 : https://github.com/yadutaf/infilter


Docker 이미지를 작게 유지하려면 불필요한 편집기를 설치하지 마십시오. Docker 호스트에서 컨테이너로 SSH를 통해 파일을 편집 할 수 있습니다.

vim scp://remoteuser@containerip//path/to/document

때로는 먼저 다음을 사용하여 컨테이너를 실행해야합니다 root.

docker exec -ti --user root <container-id> /bin/bash

그런 다음 컨테이너에서 Vim 또는 다른 것을 설치하십시오.

apt-get install vim

"docker exec"가 아닌 "docker run"을 사용하고 편집기를 설치할 수없는 제한된 영역에 있습니다. 하지만 Docker 호스트에 편집자가 있습니다.

해결 방법은 Docker 호스트에서 컨테이너 ( https://docs.docker.com/engine/reference/run/#/volume-shared-filesystems )에 볼륨을 바인딩하고 컨테이너 외부에서 파일을 편집하십시오. 다음과 같이 보입니다 :

docker run -v /outside/dir:/container/dir

이것은 주로 실험용이며 나중에 이미지를 만들 때 파일을 변경합니다.


호스트에서 파일을 편집하고 신속하게 파일을 복사하여 컨테이너 내에서 실행할 수 있습니다. 다음은 파이썬 파일을 복사하고 실행하는 한 줄 단축키입니다.

docker cp main.py my-container:/data/scripts/ ; docker exec -it my-container python /data/scripts/main.py

Docker 컨테이너에 셸한 후 다음을 입력하십시오.

apt-get update
apt-get install nano

일반적인 편집 작업의 I 설치하는 것을 선호 vi( VIM-작은 ) 만 사용 1,491 킬로바이트 또는 nano사용 1,707 킬로바이트를 .

반면에 28.9MB를vim 사용합니다 .

우리는 apt-get install하기 위해서는 update처음으로 해야한다는 것을 기억 해야합니다 .

apt-get update
apt-get install vim-tiny

CLI 에서 편집기를 시작하려면 을 입력해야합니다 vi.


그것은 다소 까다 롭지 만, 꼬집음으로 텍스트를 사용 sed하거나 awk약간 편집하거나 제거 할 수 있습니다 . 물론 정규 표현식 대상에주의하고 root컨테이너에 있을 가능성 이 있으며 권한을 다시 조정해야 할 수도 있습니다.

예를 들어 정규 표현식과 일치하는 텍스트가 포함 된 전체 줄을 제거합니다.

awk '!/targetText/' file.txt > temp && mv temp file.txt

(더)


몇 줄을 편집하는 쉬운 방법은 다음과 같습니다.

echo "deb http://deb.debian.org/debian stretch main" > sources.list

스택 오버플로 질문 sed 편집 파일을 참조하십시오.

다음과 같은 경우에 좋은 옵션이됩니다.

  1. 큰 파일을 수정하기 위해는 사용할 수 없습니다 cat.
  2. Vim 설치가 허용되지 않거나 시간이 오래 걸립니다. 나는 변경하고자 할 때 내 상황이 MySQL을 5.7 이미지를 사용하고 my.cnf파일을이 아니요 vim, vi너무 오래 (만리 방화벽) 및 빔 설치합니다. sed이미지에 제공되며 매우 간단합니다. 내 사용법은

    sed -i /s/testtobechanged/textwanted/g filename

    man sed보다 복잡한 사용법을 위해 다른 자습서를 사용 하거나 찾으십시오.


Windows 컨테이너를 사용하고 파일을 변경하려는 경우 Powershell 콘솔에서 Vim을 쉽게 가져와 사용할 수 있습니다.

PowerShell을 사용하여 Windows Docker 컨테이너에 셸하려면

docker exec -it <name> powershell

  • Chocolatey 패키지 관리자를 먼저 설치하십시오.

    Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression;

  • Vim 설치

    choco install vim

  • 환경 변수 새로 고침 exit컨테이너에 다시 셸을 넣을 수 있습니다.

  • 파일 위치로 이동하여 Vim it vim file.txt


필요한 명령 만 포함하는 특수 컨테이너를 사용할 수도 있습니다. Vim. python-vim을 선택했습니다 . 편집하려는 데이터가 다음 Dockerfile로 빌드 된 데이터 컨테이너에 있다고 가정합니다.

FROM debian:jessie
ENV MY_USER_PASS my_user_pass
RUN groupadd --gid 1001 my_user
RUN useradd -ms /bin/bash --home /home/my_user \
            -p $(echo "print crypt("${MY_USER_PASS:-password}", "salt")" | perl) \
            --uid 1001 --gid 1001 my_user
ADD src /home/my_user/src
RUN chown -R my_user:my_user /home/my_user/src
RUN chmod u+x /home/my_user/src
CMD ["true"]

데이터 컨테이너 (src_data)와 python-vim 컨테이너가 공유 할 Docker 볼륨 (src_volume)을 마운트하여 데이터를 편집 할 수 있습니다.

docker volume create --name src_volume
docker build -t src_data .
docker run -d -v src_volume:/home/my_user/src --name src_data_1 src_data
docker run --rm -it -v src_volume:/src fedeg/python-vim:latest

이렇게하면 컨테이너를 변경하지 않습니다. 이 작업을 위해 특수 컨테이너를 사용하기 만하면됩니다.

참고 URL : https://stackoverflow.com/questions/30853247/how-do-i-edit-a-file-after-i-shell-to-a-docker-container



도와주세요.
반응형