我有一个运行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
不报告任何内容。
Answers:
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
请注意,有创建docker映像的最佳做法,例如在之后清除apt缓存文件等。
Temporary failure resolving 'security.ubuntu.com'
原因很明显,因为不存在网络。
这是对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
,或适当的环境变量或其他运行时配置编译时,即使bash也不支持您期望的方式(而是具有符合标准的行为)。
-n
作为第一个参数给出时或在存在任何反斜杠文字时以实现定义的方式运行-但即使如此,它也是实现定义的,而不是标准保证的,因此行为取决于单个shell正在使用)。
通常,人们会使用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
在需要它的图像上。
有时,在Docker中最少安装Linux并没有定义路径,因此有必要使用...来调用ping。
cd /usr/sbin
ping <ip>