ОШИБКА: Не удалось подключиться к демону Docker по адресу http + docker: // localhost - он работает? - PullRequest
0 голосов
/ 02 марта 2020

Это мой dockerfile


FROM ubuntu:latest

RUN apt-get update \
    && apt-get install -y git

RUN mkdir api 

WORKDIR ./api

RUN git clone --branch develop https://link

WORKDIR ./api/api/


RUN apt-get install -y docker.io
RUN apt-get -y install curl


RUN curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)"  -o /usr/local/bin/docker-compose
RUN mv /usr/local/bin/docker-compose /usr/bin/docker-compose
RUN chmod +x /usr/bin/docker-compose



RUN docker-compose up 


Я хочу docker -создать внутри docker изображение . Тем не менее,

Это дает ОШИБКА: Не удалось подключиться к демону Docker по адресу http + docker: // localhost - он запущен? и Если он не -стандартное расположение, укажите URL-адрес с помощью переменной среды DOCKER_HOST

Как решить эту проблему? Я искал , но ни один из них не работал?

1 Ответ

1 голос
/ 02 марта 2020

Я бы предложил переосмыслить весь подход этого Dockerfile: вы не можете запустить демон Docker в Dockerfile и не можете запустить какой-либо фоновый процесс. Сценарий оболочки, который запускается на хосте, может быть лучше.

Запуск любого вида демона внутри Dockerfile в основном не работает; в конце каждой инструкции RUN все запущенные процессы завершаются. Создание образа Docker не сохраняет никаких запущенных процессов, только конечная файловая система и метаданные, такие как CMD по умолчанию для запуска при запуске контейнера. Поэтому, даже если docker-compose up сработает, результаты этого не будут сохранены в вашем образе.

Запуск демона Docker внутри контейнера Docker затруднен и, как правило, не рекомендуется. (Совместное использование сокета Docker хоста имеет существенные последствия для безопасности, но является предпочтительным подходом.) В любом случае требуются некоторые дополнительные разрешения, которые опять-таки просто недоступны в Dockerfile.

Другой красный флажок для меня здесь это строка RUN git clone. Из-за кеширования слоя Docker он с радостью скажет: «О, я уже RUN git clone, поэтому мне не нужно повторять этот шаг», и вы не получите текущий код. Подача учетных данных для удаленных git репозиториев в Dockerfile также сложна. Я также рекомендовал бы запускать команды управления исходным кодом исключительно на хосте, а не в Dockerfile.

Стандартный подход здесь заключается в том, чтобы зафиксировать файл docker-compose.yml в верхней части вашего хранилища, а также запустить git clone и docker-compose up прямо с хоста. Вы не можете использовать Dockerfile как инструмент автоматизации общего назначения.

...