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

Pos*_*Guy 46 installation

我从OS X VM Docker主机创建了一个docker容器.我使用run命令创建了它,并基于ubuntu:xenialdocker hub 的映像创建了容器.

我现在连接到我的容器后,它以root身份登录并在我的容器内的命令提示符下登录.

我试图安装自制软件,出于某种原因,我无法运行安装Homebrew的命令:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Run Code Online (Sandbox Code Playgroud)

当我跑步时,我得到了一个bash:

curl:找不到命令

不知道为什么我不能在我的容器内使用curl.

Gil*_*not 95

curl:找不到命令

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

apt-get update; apt-get install curl
Run Code Online (Sandbox Code Playgroud)

  • 应该是清楚的,不,我是Unix和Ubuntu的新手.不要以为每个人都知道这一点 (65认同)
  • 就我而言,解决方案略有不同:`apk update; apk 添加卷曲` (7认同)
  • 嗨,我为什么要使用sudo?容器也不知道sudo ..Nirojan的答案有效 (3认同)
  • 我认为您必须删除sudo才能在docker中工作 (3认同)
  • 如果您不指定“-y”,则不起作用:`apt-get install curl -y` (3认同)
  • @mahboudz,这意味着您正在使用的图像有另一个包管理器。您使用哪个图像?其他常见的是 yum 和 dnf,即您可能想尝试“yum install curl”或“dnf install curl” (2认同)

Nir*_*han 35

在我的Dockerfile中使用CURL命令时遇到同样的问题.正如吉尔斯指出的那样,必须先安装卷发.这些是要在"Dockerfile"中添加的命令.

FROM ubuntu:16.04

# Install prerequisites
RUN apt-get update && apt-get install -y \
curl
CMD /bin/bash
Run Code Online (Sandbox Code Playgroud)


gra*_*der 22

所以我在我的 docker 容器运行后添加了 curl。

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

我跑了我的形象

docker run -d -p 8899:8080 my-image:latest
Run Code Online (Sandbox Code Playgroud)

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

然后我在正在运行的容器中列出并创建终端。

docker ps
docker exec -it my-container-id-here /bin/sh
Run Code Online (Sandbox Code Playgroud)

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

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

然后我跑了:

apk
Run Code Online (Sandbox Code Playgroud)

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

apk add curl
Run Code Online (Sandbox Code Playgroud)

并得到以下内容:

apk 添加卷曲

获取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.trigger

执行 ca-certificates-20171114-r3.trigger

OK:35 个包中的 18 MiB

然后我跑了卷曲:

/ # curl
curl: try 'curl --help' or 'curl --manual' for more information
/ # 
Run Code Online (Sandbox Code Playgroud)

请注意,要“退出”终端窗口,我必须打开一个新的终端窗口并停止正在运行的容器:

docker ps
docker stop my-container-id-here
Run Code Online (Sandbox Code Playgroud)

附加:

如果您没有“apk”(这取决于您使用的基础映像),请尝试使用“另一个”安装程序。从这里的其他答案,您可以尝试:

apt-get -qq update

apt-get -qq -y install curl
Run Code Online (Sandbox Code Playgroud)

  • 感谢您一步一步的解释! (2认同)

ken*_*orb 13

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

ADD https://raw.githubusercontent.com/Homebrew/install/master/install /tmp
RUN ruby -e /tmp/install
Run Code Online (Sandbox Code Playgroud)

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


安装Azure CLI的另一个示例:

ADD https://aka.ms/InstallAzureCLIDeb /tmp
RUN bash /tmp/InstallAzureCLIDeb
Run Code Online (Sandbox Code Playgroud)


Ahm*_*ais 7

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

apt-get -qq update
Run Code Online (Sandbox Code Playgroud)

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

apt-get -qq -y install curl
Run Code Online (Sandbox Code Playgroud)

之后安装ZSH和GIT Core

apt-get install zsh
apt-get install git-core
Run Code Online (Sandbox Code Playgroud)

让zsh在ubuntu中工作很奇怪,因为sh不理解source命令.所以,你这样做是为了安装zsh

wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh
Run Code Online (Sandbox Code Playgroud)

然后将shell更改为zsh

chsh -s which zsh 然后重启

sudo shutdown -r 0本期将深入解释此问题.

  • 安装 zsh 与解决方案无关。 (2认同)

han*_*ach 6

如果您使用的是基于Alpine的图像,则必须

RUN
... \
apk add --no-cache curl \
curl ...
...
Run Code Online (Sandbox Code Playgroud)

  • 嗯,明白了:我们不希望缓存的包文件留在我们的图像中。手感不错。 (4认同)
  • 为什么要使用“--no-cache”? (2认同)