2016-10-06 5 views
65

У меня есть контейнер Docker под управлением Ubuntu, который я сделал следующим образом:Докер - Ubuntu - баш: пинг: команда не найдена

docker run -it ubuntu /bin/bash 

однако это, кажется, не имеют ping. Например.

bash: ping: command not found 

Нужно ли это устанавливать?

Похоже, что основная команда отсутствует. Я пробовал whereis ping, который ничего не сообщает.

+2

Это вполне уместно, если изображение Docker будет минимальным. В большинстве случаев контейнер никогда не будет делать ничего, кроме запуска одного приложения - зачем устанавливать что-либо, что приложение не нужно? –

+0

Если вы просто хотите запустить диагностику, может быть проще запустить busybox (какое изображение включает в себя ping), например: docker run -it -rm busybox ping my-server. –

ответ

152

Docker изображение довольно минимально, но вы можете установить ping в своем официальном убунту Docker изображения с помощью:

apt-get update 
apt-get install iputils-ping 

Скорее всего, вам не нужно ping изображения, и просто хочу, чтобы использовать его для целей тестирования. Вышеприведенный пример поможет вам.

Но если вам нужно, чтобы на вашем изображении существовал пинг, вы можете создать Dockerfile или commit контейнер, в котором вы запускали приведенные выше команды, к новому изображению.

Commit:

docker commit -m "Installed iputils-ping" --author "Your Name <[email protected]>" ContainerNameOrId yourrepository/imagename:tag 

Dockerfile:

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

Пожалуйста, обратите внимание, есть лучшие практики по созданию Docker изображений, как и очистка метких файлов кэша после и т.д.

4

This является Docker Страница концентратора для Ubuntu и this - это то, как он создается. У этого есть (несколько) голые минимальные пакеты, установленные, таким образом, если вам нужно что-то дополнительное, вам нужно установить его самостоятельно.

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, чтобы найти учебники и просматривать существующие Dockerfiles, чтобы увидеть, как они обычно делают вещи :) Например, изображение размер должен быть сведен к минимуму, выполнив apt-get clean && rm -rf /var/lib/apt/lists/* после команд apt-get install.

+0

'echo -e' фактически [не соответствует стандарту POSIX sh] (http://pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html), который не позволяет ему ничего делать, кроме print' -e 'на его выходе. (Даже с некоторыми версиями bash это поведение по умолчанию). Вместо этого используйте 'printf':' printf '% s \ n' "FROM ubuntu" "RUN apt-get update && apt-get install -y iputils-ping" "CMD bash" 'и см. Раздел ПРИМЕНЕНИЕ ИСПОЛЬЗОВАНИЯ выше документ с привязкой стандартов. –

+0

Даже bash не будет поддерживать «echo -e» так, как вы ожидаете (но будет иметь поведение, совместимое со стандартами), когда в режиме POSIX скомпилировано с параметром «--enable-xpg-echo-default» или с соответствующим переменные среды или другую конфигурацию времени выполнения. –

+0

(POSIX позволяет echo вести себя определенным образом, когда задано '-n' в качестве первого аргумента или когда имеются литералы обратной косой черты, - но даже тогда это * реализация определена *, а не стандартно гарантирована, поэтому поведение зависит от используемой отдельной оболочки). –

 Смежные вопросы

  • Нет связанных вопросов^_^