Dockerコンテナでviを実行する方法は?


103

ホスト仮想マシンにdockerをインストールしました。そして今、を使用してファイルを作成したいと思いますvi

しかし、それは私にエラーを示しています:

bash: vi: command not found

1
viはコンテナ内にインストールできません。どのコンテナをインストールして実行しましたか?
フセインBABAL

1
より具体的にする必要があります。コンテナ内でviを実行しようとしていますか?その場合、コンテナはどのイメージに基づいていますか?おそらく、viがインストールされていません。(apt-get install vim)
wpp 2015

それはimageあなたがどちらから構築しているかによります。おそらくimageあなたが使用しているのは非常に軽いので、画像として実行する必要があるものだけがあります。必要なパッケージを手動でインストールする必要があります。
イリュージョニスト

3
おそらく、コンテナー内で構成を行うべきではありません。代わりにDockerfileで実行してください。
エイドリアンムアット2015

回答:


150

次のコマンドでコンテナにログインします。

docker exec -it <container> bash

次に、次のコマンドを実行します。

apt-get update
apt-get install vim

11
apt-getの実行中に権限拒否の問題が発生した場合は、rootとしてdockerexecを実行する必要があります。「dockerexec-u root -it <container> bash」。その後、apt-getが機能するはずです。
java 2519

@arunprakashpjに感謝します。AWSリポジトリからダウンロードされたイメージに対して機能した唯一のコマンド。
realPK

37

コンテナは、箱から出してすぐにインストールされていない可能性があります。

apt-get install vimターミナルで実行すると、準備が整います。


2
はい、でも私は好きですvim-tiny(Ubuntu)
ベンホエーリー2015

3
'apt-get install vim'を実行する前に、 'apt-getupdate'を実行する必要があります。
user1521213 2018

2
First apt-get updateTHENapt-get install vim
YogiGhorecha19年

31

実行するコマンドは、使用しているベースイメージによって異なります。

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と、Dockerfileが新しいイメージを構築するために使用するその他のファイルを更新します。コンテナ内の変更は設計上一時的なものであり、コンテナを交換すると失われるため、これは本番環境では絶対に行わないでください。


1
ERROR:ロックデータベースにできません:アクセスが拒否されました
garg10may

1
@ garg10mayコマンドはrootとして実行する必要があります。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 2010年

@Junaidチェックapk add
YogiGhorecha20年

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を実行している場合にのみ機能しませんか?最初は素晴らしいアイデアだと思いましたが、うまくいかないようです。
ケビン

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 update && apt-get install -y vim

ただし、これはvimがインストールされているコンテナーに限定されます。すべてのコンテナで使用できるようにするには、Dockerfileを編集して追加します

apt-get update && apt-get install -yvimを実行します

または、新しいDockerfileでイメージを拡張して、上記のコマンドを追加することもできます。例えば。

FROM <画像名>

apt-get update && apt-get install -yvimを実行します


1

コンテナ内(VMではなくdocker内)では、デフォルトではこれらはインストールされません。apt-getでも、wgetは機能しません。私のVMはUbuntu17.10で実行されています。私にとっては、yumパッケージマネージャーが機能しました。

Yumはdebianやubuntuの一部ではありません。これはRedHatの一部です。ただし、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を実行した後に尋ねられた質問に対してプロンプトが表示された場合に、yesと見なすためのものです。


0

Dockerでの簡単なハウスキーピング用の小さなエディターが実際に必要な場合は、Dockerfileでこれを使用します。

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

Ubuntu18ベースのDockerで使用しました。(もちろん、そのRUN apt-get update前に必要な場合もありますが、独自のDockerファイルを作成している場合は、おそらくすでにそれがあります。)


0

ファイルを一度だけ変更する必要がある場合。ローカルで変更を加え、このファイルを使用して新しいDockerイメージを構築することをお勧めします。

Dockerイメージで言うと、/ path / to / docker / image /の下にあるmyFile.xmlという名前のファイルを変更する必要があります。だから、あなたはする必要があります。

  1. ローカルファイルシステムにmyFile.xmlをコピーし、必要な変更を加えます。
  2. 次の内容で「Dockerfile」という名前のファイルを作成します-
FROM docker-repo:tag
ADD myFile.xml /path/to/docker/image/

次に、を使用して独自のDockerイメージを作成します docker build -t docker-repo:v-x.x.x .

次に、新しくビルドしたDockerイメージを使用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.