无法在我的 Docker Container 中运行 Curl 命令

我从 OS X VM Docker 主机创建了一个 Docker 容器。我使用 run 命令创建了它,并根据 Docker hub 上的 ubuntu:xenial映像创建了容器。

在容器创建并作为 root 用户登录之后,我现在连接到容器,并且在容器内的命令提示符处连接到容器。

我尝试安装 Homebrew,但由于某些原因,我无法运行命令来安装 Homebrew:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

当我跑步的时候,我受到了重击:

未找到命令

不知道为什么我不能在我的容器中使用 curl。

278605 次浏览

未找到命令

是一个很大的提示,你必须安装它:

apt-get update; apt-get install curl

这是因为映像中没有包缓存,您需要运行:

apt-get -qq update

在安装软件包之前,如果您的命令位于 Dockerfile 中,那么您需要:

apt-get -qq -y install curl

安装 ZSH 和 GIT Core 之后:

apt-get install zsh
apt-get install git-core

zsh在 ubuntu 中工作是很奇怪的,因为 sh不理解源代码命令。因此,您可以这样安装 zsh:

wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh

然后将 shell 更改为 zsh:

chsh -s `which zsh`

然后重新开始:

sudo shutdown -r 0

这个问题在 问题中有详细的解释。

在 Dockerfile 中使用 CURL 命令时遇到了同样的问题。正如 Gilles 指出的,我们必须首先安装 curl。这些是要添加到“ Dockerfile”中的命令。

FROM ubuntu:16.04


# Install prerequisites
RUN apt-get update && apt-get install -y \
curl
CMD /bin/bash

所以我在码头容器运行后添加了 curl。

(这是为了调试容器... 我不需要永久添加)

我运行了我的图像

docker run -d -p 8899:8080 my-image:latest

(以上使我的“应用程序”在我的机器端口8899上可用)(这个问题不重要)

然后,我列出并创建终端到运行的容器。

docker ps
docker exec -it my-container-id-here /bin/sh

如果上面的 exec命令不起作用,请查看这篇 SOF 文章:

错误: 无法启动容器: stat/bin/sh: 没有这样的文件或目录”

然后我跑过去:

apk

只是为了证明它存在于运行的容器中,然后我跑了:

apk add curl

得到了以下结果:

加上卷曲

http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz

http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz

(1/5)安装 ca- 证书(20171114-r3)

(2/5)安装 nghttp2-libs (1.32.0-r0)

(3/5)安装 libssh2(1.8.0-r3)

(4/5)安装 libcurl (7.61.1-r1)

(5/5)安装 curl (7.61.1-r1)

执行 Busybox-1.28.4-r2触发器

正在执行 ca- 证书 -20171114-r3. 触发器

OK: 35个包中的18个 MiB

然后我跑过去:

/ # curl
curl: try 'curl --help' or 'curl --manual' for more information
/ #

注意,为了“走出”钻入终端窗口,我必须打开一个 新的终端窗口并停止运行的容器:

docker ps
docker stop my-container-id-here

附录:

如果您没有“ apk”(这取决于您使用的是哪个基础映像) ,那么尝试使用“ another”安装程序。从这里的其他答案中,你可以尝试:

apt-get -qq update


apt-get -qq -y install curl

如果您使用的是基于 阿尔卑斯山的图像,您必须这样做

RUN
... \
apk add --no-cache curl \
curl ...
...

不需要安装 curl就可以将文件下载到 Docker 容器中,可以使用 ADD命令,例如。

ADD https://raw.githubusercontent.com/Homebrew/install/master/install /tmp
RUN ruby -e /tmp/install

注意: 将以上几行添加到 Dockerfile文件中。


另一个安装 Azure CLI的例子:

ADD https://aka.ms/InstallAzureCLIDeb /tmp
RUN bash /tmp/InstallAzureCLIDeb

我的成功之处在于:

FROM ubuntu:20.0.4


RUN apt-get update &&\
apt-get install -y curl
...

您可以基于一个已经有 curl的图像。

一个简约的例子:

FROM alpine/curl

或者是一个成熟的:

FROM rockylinux:9