У меня есть контейнер Docker под управлением Ubuntu, который я сделал следующим образом:
docker run -it ubuntu /bin/bash
однако он, похоже, не имеет ping
. Например.
bash: ping: command not found
Нужно ли это устанавливать?
Кажется, что основная команда отсутствует. Я пробовал whereis ping
, который ничего не сообщает.
Изображения Docker довольно минимальны, но вы можете установить ping
в свое официальное изображение докеры Ubuntu с помощью:
apt-get update
apt-get install iputils-ping
Скорее всего, вам не нужно 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
Обратите внимание, что есть рекомендации по созданию изображений докеров, например, очистка файлов кэша apt после и т.д.
Это страница Docker Hub для 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, чтобы найти учебники и просмотреть существующие файлы Docker, чтобы увидеть, как они обычно работают :) Например, размер изображения должен быть минимизирован с помощью команды apt-get clean && rm -rf/var/lib/apt/lists/*
после apt-get install
команды 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
или с соответствующими переменными среды или другой средой выполнения конфигурации.
Обычно люди тянут официальное изображение Ubuntu/CentOS, но они не понимают, что эти изображения минимальны и не имеют ничего общего с этим.
Для Ubuntu это изображение создано из официальных tarfs rootfs, предоставленных Canonical. Учитывая, что это минимальная установка 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
В этом образе будет установлено все.
В качестве альтернативы вы можете использовать образ Docker, на котором уже установлен ping, например 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>