问题描述
我有一个运行Ubuntu的Docker容器,其操作如下:
docker run -it ubuntu /bin/bash
但是它似乎没有ping
。例如。
bash: ping: command not found
我需要安装吗?
似乎缺少了一个非常基本的命令。我尝试了whereis ping
,但未报告任何内容。
最佳方案
Docker镜像非常小,但是您可以通过以下方式在官方ubuntu Docker镜像中安装ping
:
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
请注意,有创建docker映像的最佳做法,例如在之后清除apt缓存文件等。
次佳方案
This是Ubuntu的Docker Hub页面,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查找教程并浏览现有的Dockerfile,以了解它们通常的工作方式:)例如,应通过在apt-get install
命令之后运行apt-get clean && rm -rf /var/lib/apt/lists/*
来最小化图像大小。
第三种方案
通常,人们会使用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