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

cmssoen2  于 2022-11-22  发布在  Docker
关注(0)|答案(8)|浏览(274)

我 从 我 的 OS X VM Docker 主机 创建 了 一 个 Docker 容器 。 我 使用 run 命令 创建 了 它 , 并 基于 ubuntu:xenial 映像 创建 了 这个 容器 。
在 创建 容器 并 以 root 用户 身份 登录 后 , 我 现在 已经 连接 到 容器 , 并 在 容器 内 的 命令 提示 符 下 登录 。
我 尝试 安装 homebrew , 但 由于 某种 原因 , 我 无法 运行 安装 homebrew 的 命令 :

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

中 的 每 一 个
当 我 跑步 时 , 我 得到 了 一 个 重击 :
curl : 未 找到 命令
不 知道 为什么 我 不能 在 我 的 容器 中 使用 curl 。

7uhlpewt

7uhlpewt1#

curl:未找到命令
是一个很大的提示,你必须安装它:

apt-get update; apt-get install curl
uyhoqukh

uyhoqukh2#

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

FROM ubuntu:16.04

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

qjp7pelc3#

所以我在我的Docker容器运行后添加了curl。
(This用于调试容器...我不需要永久添加)
我运行了我的图像

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

(the以上使我的“应用程序”在我的机器上的端口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 add curl

得到了如下结果:
apk添加 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)安装nghttp 2-库(1.32.0-r 0)
(3/5)安装libssh 2(1.8.0-r3)
(4/5)安装libcurl(7.61.1-r1)
(5/5)安装卷边(7.61.1-r1)
正在执行busybox-1.28.4-r2.trigger
正在执行ca证书-20171114-r3.trigger
合格:35个封装中18 MiB
然后我运行curl:

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

注意,要“退出”drilled-in-terminal-window,我必须打开一个终端窗口并停止运行容器:

docker ps
docker stop my-container-id-here

附录:
如果你没有“apk”(这取决于你使用的是哪个基础映像),那么尝试使用“另一个”安装程序。

apt-get -qq update

apt-get -qq -y install curl
xqnpmsa8

xqnpmsa84#

发生这种情况是因为映像中没有包缓存,您需要运行:

apt-get -qq update

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

apt-get -qq -y install curl

然后安装ZSH和GIT核心:

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

zsh在ubuntu中工作是很奇怪的,因为sh不理解源命令。

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

本期将对这一问题进行深入解释。

c9qzyr3d

c9qzyr3d5#

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

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

xwbd5t1u6#

你不需要安装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
brjng4g3

brjng4g37#

对我来说成功的是:

FROM ubuntu:20.0.4

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

vohkndzv8#

您可以基于已经具有curl的映像。
简约主义风格:

FROM alpine/curl

或者是一个成熟的计划:

FROM rockylinux:9

相关问题