Docker 컨테이너에서 vi를 실행하는 방법은 무엇입니까?


103

호스트 가상 머신에 도커를 설치했습니다. 이제 vi.

하지만 오류가 표시됩니다.

bash: vi: command not found

1
vi는 컨테이너 내부에 설치되지 않을 수 있습니다. 어떤 컨테이너를 설치하고 실행 했습니까?
Hüseyin BABAL

1
좀 더 구체적이어야합니다. 컨테이너 내에서 vi를 실행하려고하십니까? 그렇다면 컨테이너의 기반이되는 이미지는 무엇입니까? 아마도 vi가 설치되어 있지 않습니다. (apt-get install vim)
wpp

그것은 image당신이 어떤 것을 만들고 있는지에 달려 있습니다. 아마도 image당신이 사용하고있는 것이 너무 가벼워서 이미지로 실행하는 데 필요한 것만 가지고있을 것입니다. 필요한 패키지를 수동으로 설치해야합니다.
illusionist

3
컨테이너 내부에서 구성을 수행해서는 안됩니다. 대신 Dockerfile에서 수행하십시오.
Adrian Mouat 2015

답변:


150

다음 명령을 사용하여 컨테이너에 로그인합니다.

docker exec -it <container> bash

그런 다음 다음 명령을 실행합니다.

apt-get update
apt-get install vim

11
apt-get을 실행하는 동안 권한 거부 문제가 발생하면 docker exec를 루트로 실행해야합니다. "docker exec -u root -it <container> bash". 그런 다음 apt-get이 작동합니다.
java25

감사합니다 @arunprakashpj. AWS 리포지토리에서 다운로드 한 이미지에 대해 작동하는 유일한 명령입니다.
realPK

37

컨테이너가 상자에서 꺼내지 않은 것 같습니다.

apt-get install vim터미널에서 실행 하면 준비가 완료됩니다.


2
네,하지만 선호합니다 vim-tiny(Ubuntu)
Ben Whaley

3
'apt-get install vim'을 실행하기 전에 'apt-get update'를 실행해야합니다.
user1521213

2
First apt-get updateTHENapt-get install vim
Yogi Ghorecha

32

실행할 명령은 사용중인 기본 이미지에 따라 다릅니다.

Alpine vi의 경우 기본 OS의 일부로 설치됩니다. 설치 vim는 다음과 같습니다.

apk -U add vim

Debian 및 Ubuntu의 경우 :

apt-get update && apt-get install -y vim

CentOS의 경우 vi일반적으로 기본 OS와 함께 설치됩니다. 대상 vim:

yum install -y vim

이것은 초기 개발 단계에서만 수행되어야합니다. 작동하는 컨테이너를 가져 오면 컨테이너 외부에 저장된 이미지 또는 구성에 파일을 변경해야합니다. Dockerfile 및 새 이미지를 빌드하는 데 사용하는 기타 파일을 업데이트하십시오. 컨테이너 내부의 변경은 일시적으로 설계되었으며 컨테이너를 교체하면 손실되므로 프로덕션에서는이 작업을 수행해서는 안됩니다.


1
ERROR : Unable to lock database : Permission denied
garg10may

1
@ garg10may 명령은 루트로 실행해야합니다. USER rootDockerfile 내부에서이 작업을 수행하지만 다른 사용자로 다시 전환해야합니다. 실행중인 컨테이너 :docker exec -u root ...
BMitch

21

이것을 사용하십시오 :

apt-get update && apt-get install -y vim

위 명령에 대한 설명

  1. apt-get update => 현재 패키지를 업데이트합니다.
  2. apt-get install => 패키지를 설치합니다.
  3. -y => 권한을 통과하면 기본 권한이 예로 설정됩니다.
  4. vim => 설치할 패키지의 이름.

시도했지만이 오류가 발생했습니다bash: apt-get: command not found
Junaid

확인 @Junaidapk add
요기 Ghorecha

12

Dockerfile에 다음 줄을 추가 한 다음 Docker 이미지를 다시 빌드합니다.

RUN apt-get update && apt-get install -y vim

9

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

vim scp://remoteuser@container-ip//path/to/document

3
컨테이너가 ssh를 실행하는 경우에만 작동하지 않습니까? 처음에는 훌륭한 아이디어라고 생각했지만 제대로 작동하지 않는 것 같습니다.
Kevin

7

Debian 기반 컨테이너에서 아래 명령을 사용하십시오.

apt-get install vim-tiny

Dockerfile에서 사용하기위한 전체 지침 :

RUN apt-get update && apt-get install --no-install-recommends -y \   
 vim-tiny \  
 && apt-get clean && rm -rf /var/lib/apt/lists/*

불필요한 패키지를 설치하지 않고 불필요한 다운로드 파일을 제거하므로 Docker 이미지 크기가 크게 증가하지 않습니다.


3

Docker 컨테이너 내에 설치하려면 명령을 실행할 수 있습니다.

docker exec apt-get 업데이트 && apt-get install -y vim

그러나 이것은 vim이 설치된 컨테이너로 제한됩니다. 모든 컨테이너에서 사용할 수 있도록하려면 Dockerfile을 편집하고

apt-get update && apt-get install -y vim 실행

또는 새 Dockerfile에서 이미지를 확장하고 위의 명령을 추가 할 수도 있습니다. 예 :

FROM <이미지 이름>

apt-get update && apt-get install -y vim 실행


1

컨테이너 내부 (VM이 아닌 도커에 있음), 기본적으로 설치되지 않습니다. 심지어 apt-get을 , wget과는 작동하지 않습니다. 내 VM이 Ubuntu 17.10에서 실행되고 있습니다. 나를 위해 yum 패키지 관리자가 작동했습니다.

Yum은 데비안이나 우분투의 일부가 아닙니다. 레드햇의 일부입니다. 그러나 Ubuntu에서 작동하며 apt-get과 같이 기본적으로 설치됩니다.

Tu install vim, 다음 명령 사용

yum install -y vim-enhanced 

vim을 제거하려면 :

yum uninstall -y vim-enhanced 

비슷하게,

yum install -y wget 
yum install -y sudo 

-y는 yum install packagename 을 수행 한 후 질문이 있으면 예라고 가정합니다.


0

실제로 도커에서 간단한 정리를위한 작은 편집기를 원한다면 Dockerfile에서 다음을 사용하십시오.

RUN apt-get install -y busybox && ln -s /bin/busybox /bin/vi

우분투 18 기반 도커에서 사용했습니다. (물론 RUN apt-get update이전에 필요할 수 있지만 고유 한 Docker 파일을 만드는 경우 이미있을 것입니다.)


0

파일을 한 번만 변경해야하는 경우. 로컬에서 변경하고이 파일로 새 도커 이미지를 빌드하는 것을 선호해야합니다.

도커 이미지에서 / path / to / docker / image / 아래에서 myFile.xml이라는 파일을 변경해야합니다. 그래서 당신은해야합니다.

  1. 로컬 파일 시스템에 myFile.xml을 복사하고 필요한 사항을 변경합니다.
  2. 다음 내용으로 'Dockerfile'이라는 파일을 만듭니다.
FROM docker-repo:tag
ADD myFile.xml /path/to/docker/image/

그런 다음 다음을 사용하여 고유 한 도커 이미지를 빌드합니다. docker build -t docker-repo:v-x.x.x .

그런 다음 새로 빌드 된 도커 이미지를 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.