Ubuntuを実行するDockerコンテナーを持っています。
docker run -it ubuntu /bin/bash
しかしそれは持っていないようですping
。例えば
bash: ping: command not found
インストールする必要がありますか?
かなり基本的なコマンドがないようです。whereis ping
何も報告しないものを試しました。
Ubuntuを実行するDockerコンテナーを持っています。
docker run -it ubuntu /bin/bash
しかしそれは持っていないようですping
。例えば
bash: ping: command not found
インストールする必要がありますか?
かなり基本的なコマンドがないようです。whereis ping
何も報告しないものを試しました。
回答:
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は明らかに失敗します。
これは 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"
。上記のリンク先の標準ドキュメントの「アプリケーションの使用法」セクションをご覧ください。
echo -e
、POSIXモードで--enable-xpg-echo-default
、または適切な環境変数またはその他のランタイム構成を使用してコンパイルした場合、期待どおりの方法をサポートしません(代わりに標準に準拠した動作になります)。
-n
最初の引数として、または任意のバックスラッシュリテラルが存在する場合-それでも、それの実装定義ではなく、標準保証行動は、個々のシェルに依存しているので、使用中で)。
一般的に人々は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
そのイメージにはすべてのものがインストールされます。
あるいは、pingがすでにインストールされているDockerイメージを使用することもできます(例:busybox)。
docker run --rm busybox ping SERVER_NAME -c 2
apt-get iputils-ping
それを必要とするイメージを望みます。
このようなエラーが発生するたび
bash: <command>: command not found
このコマンドを使用しているホストで、すでにこのソリューションを使用している場合:
dpkg -S $(which <command>)
そのパッケージがインストールされているホストがありませんか?これを試してください:
apt-file search /bin/<command>
LinuxのDockerへの最小インストールではパスが定義されない場合があるため、...を使用してpingを呼び出す必要があります。
cd /usr/sbin
ping <ip>