Не удается запустить команду Curl внутри контейнера Docker Container

Я создал контейнер докеров из моего хоста OS X VM. Я создал его с помощью команды run и создал контейнер, основанный на ubuntu:xenial изображении с док-станции.

Теперь я подключен к своему контейнеру после его создания и входа в систему под именем root и в командной строке внутри моего контейнера.

Я попытался установить homebrew, и по какой-то причине я не могу запустить команду для установки Homebrew:

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

когда я запускаю, я получаю bash:

curl: команда не найдена

Не знаю, почему я не могу использовать завиток внутри контейнера.

Ответ 1

curl: команда не найдена

это большая подсказка, вы должны установить его с помощью:

apt-get update; apt-get install curl

Ответ 2

Эта проблема возникла при использовании команды CURL внутри моего Dockerfile. Как указал Жиль, мы должны сначала установить curl. Это команды, которые будут добавлены в 'Dockerfile'.

FROM ubuntu:16.04

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

Ответ 3

Потому что в образе нет кэша пакетов, вам нужно запустить:

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

а затем вы измените свою оболочку на Zsh

chsh -s which zsh затем перезагружается

sudo shutdown -r 0 Эта проблема подробно объясняется в этом выпуске.

Ответ 4

Поэтому я добавил 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

и получил ниже

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

Ответ 5

Если вы используете альпийское изображение, вы должны

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