도커 컨테이너에 셸링한 후 파일을 편집하려면 어떻게 해야 합니까?
다음을 사용하여 도커 컨테이너로 성공적으로 셸링했습니다.
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
또는 다음 도커 파일을 사용합니다.
FROM confluent/postgres-bw:0.1
RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "vim"]
도커 이미지는 최소한으로 잘라져 전달되므로 배송된 컨테이너에 편집기가 설치되지 않습니다.그렇기 때문에 수동으로 설치해야 합니다.
편집
저는 또한 당신이 그 주제에 대한 저의 게시물을 읽도록 격려합니다.
몇 가지 작은 변경(예: 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
고양이가 우아하게 나갈 수 있도록.주석을 보면 ctrl-d를 눌러 파일 끝을 표시할 수도 있습니다("더 이상 입력이 오지 않음").
다른 은 다른옵다같음다습니과와 같은 입니다.infilter
일부 ptrace 매직을 사용하여 프로세스를 컨테이너 네임스페이스에 주입합니다. https://github.com/yadutaf/infilter
도커 이미지를 작게 유지하려면 불필요한 편집기를 설치하지 마십시오.SSH를 통해 Docker 호스트에서 컨테이너로 파일을 편집할 수 있습니다.
vim scp://remoteuser@containerip//path/to/document
사용할 수 있습니다.cat
설된경, 다과함과 >
인물의 성격조작 방법은 다음과 같습니다.
cat > file_to_edit
#1 Write or Paste you text
#2 don't forget to leave a blank line at the end of file
#3 Ctrl + C to apply configuration
이제 명령을 사용하여 결과를 확인할 수 있습니다.
cat file
다음을 사용하여 기존 파일을 열 수 있습니다.
cat filename.extension
클립보드에 있는 모든 기존 텍스트를 복사합니다.
그런 다음 이전 파일을 삭제합니다.
rm filename.extension
또는 이전 파일의 이름을 다음으로 변경합니다.
mv old-filename.extension new-filename.extension
다음을 사용하여 새 파일 만들기
cat > new-file.extension
그런 다음 복사된 모든 텍스트를 클립보드에 붙여넣고 다음을 누릅니다.Enter
는 를 눌러 종료합니다.ctrl+z
그리고 voila는 어떤 종류의 편집기도 설치할 필요가 없습니다.
에서는 일적반인편작경설우치좋것습다를 설치하는 것을 합니다.vi
(vim-tiny), 1491 kB만 사용하거나nano
1707kB를 사용합니다.
반면에vim
28.9MB를 사용합니다.
우리는 그것을 기억해야 합니다.apt-get install
일하려면, 우리는 해야 합니다.update
처음에는, 그래서:
apt-get update
apt-get install vim-tiny
CLI에서 편집기를 시작하려면 입력해야 합니다.vi
.
때때로 당신은 먼저 컨테이너를 실행해야 합니다.root
:
docker exec -ti --user root <container-id> /bin/bash
그런 다음 용기에서 Vim 또는 다른 것을 설치하려면 다음을 수행합니다.
apt-get install vim
저는 "docker run"("docker exec"이 아닌)을 사용하며, 편집기를 설치할 수 없는 제한 구역에 있습니다.하지만 도커 호스트에 편집자가 있습니다.
해결 방법은 Docker 호스트에서 컨테이너(https://docs.docker.com/engine/reference/run/ #/volume-shared-filesystems)로 볼륨을 바인딩 마운트하고 컨테이너 외부에 있는 파일을 편집하는 것입니다.다음과 같이 표시됩니다.
docker run -v /outside/dir:/container/dir
이것은 대부분 실험을 위한 것이고, 나중에 이미지를 빌드할 때 파일을 변경할 것입니다.
도커 컨테이너에 셸링한 후 다음을 입력합니다.
apt-get update
apt-get install nano
호스트에서 파일을 편집하고 컨테이너에 빠르게 복사하여 실행할 수 있습니다.다음은 Python 파일을 복사하고 실행하기 위한 한 줄 바로 가기입니다.
docker cp main.py my-container:/data/scripts/ ; docker exec -it my-container python /data/scripts/main.py
Windows 컨테이너를 사용하고 파일을 변경하려면 Vim in Powershell 콘솔을 쉽게 가져와 사용할 수 있습니다.
PowerShell로 Windows Docker 컨테이너를 셸링하려면:
docker exec -it <name> powershell
먼저 Chocolaty 패키지 관리자 설치
Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression;
VIM 설치
choco install vim
환경 변수 새로 고침 당신은 할 수 있습니다.
exit
그리고 다시 용기로 껍질을 벗깁니다.파일 위치로 이동 및 Vimit
vim file.txt
스택 오버플로 질문 편집 파일을 참조하십시오.
다음과 같은 경우 이 옵션이 좋습니다.
- 큰 파일을 수정하려면 사용할 수 없습니다.
cat
. Vim 설치가 허용되지 않거나 너무 오래 걸립니다.내 상황은 MySQL 5.7 이미지를 사용하는 것입니다.
my.cnf
파일, 없습니다.vim
,vi
Vim 설치 시간이 너무 오래 걸립니다(China Great Firewall).sed
이미지에 제공되며 매우 간단합니다.저의 용법은 다음과 같습니다.sed -i /s/testtobechanged/textwanted/g filename
사용하다
man sed
또는 다른 튜토리얼을 찾아 보다 복잡한 용도로 사용할 수 있습니다.
bin/sh(bin/bash가 작동하지 않는 경우)로만 컨테이너에 셸할 수 있고 aptorap-get이 컨테이너에서 작동하지 않는 경우, 컨테이너 내부에 pkin 명령 프롬프트를 입력하여 apk가 설치되어 있는지 확인합니다.가능한 경우 다음과 같이 나노를 설치할 수 있습니다: apk add nano
그러면 나노는 평소대로 작동할 것입니다.
그것은 좀 형편없지만, 곤경에 처했을 때 당신은 사용할 수 있습니다.sed
또는awk
텍스트를 작게 편집하거나 제거합니다.물론 정규식 목표물을 조심하고 당신이 그럴 가능성이 있다는 것을 알아두십시오.root
사용자 컨테이너에서 권한을 다시 조정해야 할 수 있습니다.
예를 들어, regex와 일치하는 텍스트가 포함된 전체 줄 제거:
awk '!/targetText/' file.txt > temp && mv temp file.txt
나노를 설치할 수 있습니다.
yum install nano
몇 줄을 쉽게 편집할 수 있는 방법은 다음과 같습니다.
echo "deb http://deb.debian.org/debian stretch main" > sources.list
아무것도 설치하지 않고 실행 중인 컨테이너에서 파일 내용을 볼 수 있습니다.
방법 1: vs 코드를 사용하는 경우 도커 확장을 설치합니다.그런 다음 컨테이너를 실행할 때 왼쪽 사이드 바에 있는 도커 아이콘을 클릭합니다.실행 중인 컨테이너의 디렉토리 구조를 보여줍니다.gui에서 디렉토리로 드릴다운하여 파일 내용을 열 수 있습니다.
방법 2: 명령행별로 수행하려면 파워셸에서 명령을 실행합니다.
도커 exec -it 컨테이너 ID
그런 다음 당신의 파일이 있는 CD를 사용하여 당신의 디렉토리로 이동합니다.
그런 다음 "more --line 10 index.dll" 명령(또는 파일 이름)을 사용합니다.
이렇게 하면 한 번에 10개의 선을 볼 수 있습니다.Enter 키를 누르면 다음 10개 라인이 표시됩니다.
mysql:8.0 컨테이너를 사용했는데 텍스트 편집기가 설치되어 있지 않습니다.패키지 관리자도 설치되어 있지 않았습니다.다행히 도커 확장자와 함께 VS Code를 설치했습니다.도커 확장자를 사용하면 실행 중인(닫힌) 모든 컨테이너를 보고 로컬 파일 시스템인 것처럼 파일 시스템을 드릴다운할 수 있습니다.
HTH!
필요한 명령 Vim만 포함된 특수 컨테이너를 사용할 수도 있습니다.저는 파이썬빔을 선택했습니다.여기에서는 편집할 데이터가 다음 Docker 파일로 작성된 데이터 컨테이너에 있다고 가정합니다.
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 컨테이너가 공유할 도커 볼륨(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
이렇게 하면 컨테이너를 변경할 수 없습니다.당신은 이 작업을 위해 특별한 용기를 사용할 뿐입니다.
루트로 처음 로그인: 도커 run -u root -tibash 다음 명령을 입력합니다. apt-get update &&apt-get install nano
편집기를 설치하기 전에 컨테이너를 업데이트해야 합니다.
apt-get update
apt-get install nano vi
도커에는 편집기가 없습니다. 그러니 vim을 설치하기만 하면 됩니다. 36MB의 공간이 도커를 죽이지 않습니다!
언급URL : https://stackoverflow.com/questions/30853247/how-do-i-edit-a-file-after-i-shell-to-a-docker-container
'code' 카테고리의 다른 글
왜 tqdm 인쇄가 같은 라인을 업데이트하는 대신 새로운 라인으로 진행됩니까? (0) | 2023.09.05 |
---|---|
Spring Boot REST API에서 시간 초과를 설정하는 방법은 무엇입니까? (0) | 2023.09.05 |
빠른 언어 NSClassFromString (0) | 2023.09.05 |
10분마다 vba를 실행시키는 방법은? (0) | 2023.09.05 |
JavaScript를 사용하여 특정 지연 후 스크립트 실행 (0) | 2023.08.26 |