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를 눌러 파일 끝을 표시 할 수 있습니다 ( "입력이 더 이상 없음").
또 다른 옵션은 infilter
ptrace 마술과 함께 컨테이너 네임 스페이스에 프로세스를 주입하는 것과 같은 것 입니다 : 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 편집 파일을 참조하십시오.
다음과 같은 경우에 좋은 옵션이됩니다.
- 큰 파일을 수정하기 위해는 사용할 수 없습니다
cat
. 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
이렇게하면 컨테이너를 변경하지 않습니다. 이 작업을 위해 특수 컨테이너를 사용하기 만하면됩니다.
도와주세요.
'development' 카테고리의 다른 글
JavaScript에서 유휴 시간을 우아하게 감지하는 방법은 무엇입니까? (0) | 2020.02.17 |
---|---|
프로그래밍 방식으로 머신에서 코어 수 찾기 (0) | 2020.02.17 |
백업 세트는 기존 이외의 데이터베이스 백업을 보유합니다. (0) | 2020.02.17 |
LDAP 검색에서 CN, OU, DC 란 무엇입니까? (0) | 2020.02.17 |
Android 기기에서 apk 파일을 어떻게 얻습니까? (0) | 2020.02.17 |