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

时间:2016-01-02 23:13:39

标签: installation

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

我已经创建并以root用户身份登录我的容器并在容器内的命令提示符下连接到我的容器。

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

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

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

  

curl:找不到命令

我不知道为什么我不能在容器内使用卷曲。

6 个答案:

答案 0 :(得分:76)

  

curl:找不到命令

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

apt-get update; apt-get install curl

答案 1 :(得分:24)

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

FROM ubuntu:16.04
MAINTAINER niro;

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

答案 2 :(得分:6)

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

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 此问题在此issue中有详细解释。

答案 3 :(得分:2)

因此,我在docker容器运行后添加了curl。

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

我运行了图片

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

(上面的代码使我的“ app”可以在端口8899的计算机上使用)(对这个问题并不重要)

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

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

(如果上面的“ exec”命令不起作用,请查看此SOF文章Error: Cannot Start Container: stat /bin/sh: no such file or directory"

然后我跑了

  

apk

只是为了证明它存在于正在运行的容器中

然后我跑了

  

apk添加curl

并获得以下内容

apk add curl
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
(1/5) Installing ca-certificates (20171114-r3)
(2/5) Installing nghttp2-libs (1.32.0-r0)
(3/5) Installing libssh2 (1.8.0-r3)
(4/5) Installing libcurl (7.61.1-r1)
(5/5) Installing curl (7.61.1-r1)
Executing busybox-1.28.4-r2.trigger
Executing ca-certificates-20171114-r3.trigger
OK: 18 MiB in 35 packages

那我就卷发了!

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

注意,要“退出”钻入的终端窗口,我必须打开一个终端窗口并停止运行中的容器

docker ps
docker stop my-container-id-here

答案 4 :(得分:2)

您无需安装curl即可将文件下载到Docker容器中,请使用ADD command,例如

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

答案 5 :(得分:0)

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

RUN
... \
apk add --no-cache curl \
curl ...
...
相关问题