Docker-Ubuntu-bash:ping:コマンドが見つかりません


336

Ubuntuを実行するDockerコンテナーを持っています。

docker run -it ubuntu /bin/bash

しかしそれは持っていないようですping。例えば

bash: ping: command not found

インストールする必要がありますか?

かなり基本的なコマンドがないようです。whereis ping何も報告しないものを試しました。


6
Dockerイメージが最小限であることは完全に適切です。ほとんどの場合、コンテナは単一のアプリケーションを実行する以外に何もしません-なぜそのアプリケーションに不要なものをインストールするのですか?
Charles Duffy

3
単に診断を実行したい場合は、busybox(このイメージにはpingが含まれています)を実行する方が簡単な場合があります。例:docker run -it --rm busybox ping my-server。
フランシスノートン

回答:


686

Dockerイメージはかなり最小限ですがping、次の方法で公式のUbuntu Dockerイメージにインストールできます。

apt-get update
apt-get install iputils-ping

おそらくあなたはpingあなたのイメージを必要とせず、ただテスト目的でそれを使いたいのです。上記の例はあなたを助けるでしょう。

ただし、イメージにpingを実行する必要がある場合は、Dockerfileまたはcommit上記のコマンドを実行したコンテナを新しいイメージに作成できます。

コミット:

docker commit -m "Installed iputils-ping" --author "Your Name <name@domain.com>" ContainerNameOrId yourrepository/imagename:tag

Dockerfile:

FROM ubuntu
RUN apt-get update && apt-get install -y iputils-ping
CMD bash

後ほどaptキャッシュファイルをクリアするなど、Dockerイメージの作成にはベストプラクティスがあることに注意してください。


Temporary failure resolving 'security.ubuntu.com'ネットワーキングが存在しないため、apt-getは明らかに失敗します。
Pavel Niedoba

32

これは Ubuntuのためドッカーハブページで、これはそれが作成される方法です。それは(ある程度)最小限のパッケージしかインストールされていないため、追加のものが必要な場合は自分でインストールする必要があります。

apt-get update && apt-get install -y iputils-ping

ただし、通常は「Dockerfile」を作成してビルドします。

mkdir ubuntu_with_ping
cat >ubuntu_with_ping/Dockerfile <<'EOF'
FROM ubuntu
RUN apt-get update && apt-get install -y iputils-ping
CMD bash
EOF
docker build -t ubuntu_with_ping ubuntu_with_ping
docker run -it ubuntu_with_ping

Googleを使用してチュートリアルを見つけ、既存のDockerfileを参照して通常の動作を確認してください:)たとえばapt-get clean && rm -rf /var/lib/apt/lists/*apt-get installコマンドの後に実行することにより、画像サイズを最小限に抑える必要があります。


echo -e実際にはPOSIX sh標準反して-eおり、出力に出力する以外に何もできません。(bashの一部のバージョンでも、それがデフォルトの動作です)。printf代わりにを使用してくださいprintf '%s\n' "FROM ubuntu" "RUN apt-get update && apt-get install -y iputils-ping" "CMD bash"。上記のリンク先の標準ドキュメントの「アプリケーションの使用法」セクションをご覧ください。
Charles Duffy

bashはecho -e、POSIXモードで--enable-xpg-echo-default、または適切な環境変数またはその他のランタイム構成を使用してコンパイルした場合、期待どおりの方法をサポートしません(代わりに標準に準拠した動作になります)。
Charles Duffy

(POSIXは、与えられたときにエコーが実装定義の方法で動作することを可能にする-n最初の引数として、または任意のバックスラッシュリテラルが存在する場合-それでも、それの実装定義ではなく、標準保証行動は、個々のシェルに依存しているので、使用中で)。
Charles Duffy

コメントと改善をありがとう、「コピーして貼り付ける」フレンドリーな例は、後から考えたものでした。
NikoNyrh 2016年

7

一般的に人々はUbuntu / CentOSの公式イメージをプルしますが、これらのイメージが最小限であり、その上に何もないことに気づいていません。

Ubuntuの場合、このイメージはCanonicalが提供する公式のrootfs tarballから構築されます。Ubuntuの最小インストールであることを考えると、このイメージにはデフォルトでC、C.UTF-8、およびPOSIXロケールのみが含まれています。

net-tools(ifconfig、netstatを含む)、ip-utils(pingを含む)、その他curlなどをコンテナーにインストールし、コンテナーからイメージを作成したり、イメージの作成中にこれらのツールをインストールするDockerfileを書き込んだりできます。

以下はDockerfileの例ですが、これからイメージを作成するときに、これらのツールが含まれます。

FROM vkitpro/ubuntu16.04
RUN     apt-get  update -y \
&& apt-get upgrade -y \
&& apt-get install iputils-ping -y \
&& apt-get install net-tools -y \
CMD bash

または、ベースイメージからコンテナを起動し、これらのユーティリティをコンテナにインストールして、イメージにコミットします。docker commit -m "任意の説明メッセージ" container_id image_name:lattest

そのイメージにはすべてのものがインストールされます。


6

あるいは、pingがすでにインストールされているDockerイメージを使用することもできます(例:busybox)

docker run --rm busybox ping SERVER_NAME -c 2

これは解決策ですが、pingを実行するためだけにイメージを作成することは、私にはやり過ぎに思えます。私はむしろapt-get iputils-pingそれを必要とするイメージを望みます。
renatoaraujoc 2018年



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