Как получить доступ к локальному хосту машины Хоста 127.0.0.1 из контейнера Docker

Я размещал демон Git на локальном хосте, т.е. '/usr/bin/git daemon --listen=127.0.0.1 --base-path=/opt' как systemd служба, и я пытаюсь получить к нему доступ из контейнера докера. Я не упомянул порт, потому что я не хочу открывать порт для внешней сети.

Dockerfile:

RUN git clone git://127.0.0.1/repo/ repo_dir

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

Итак, как подключить подключение localhost хост-машины из Docker-контейнера?

1 ответ

Решение

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

Да, вот и вся идея изоляции, обеспечиваемой контейнером, даже docker build (который создает один контейнер на строку Dockerfile и фиксирует его в промежуточном образе).

Как прокомментировал Dhairya и упомянул в документации, я упомянул в своих комментариях: " Сеть Docker-контейнеров " и docker build Вы можете установить режим сети для RUN инструкции во время сборки: тогда localhost будет относиться к хосту localhost.

 docker build --network="host"

Это только с API 1.25+, в Docker v.1.13.0-rc5 (январь 2017 г.)

POST /build принимает networkmode параметр для указания сети, используемой во время сборки.


Но если вам не нужен Git в вашем фактическом встроенном образе (для запуска его основного процесса), было бы легче

  • клонируйте репо локально (непосредственно на хосте) перед сборкой докера.
    Вам нужно клонировать его там, где находится ваш Dockerfile, так как он должен быть относительно исходного каталога, который создается (контекст сборки).
  • использовать COPY директива в Dockerfile, чтобы скопировать папку хоста, представляющую извлеченный репозиторий Git.
    Примечание: добавить .git/: на ваш .dockerignore (файл в той же папке, что и ваш Dockerfile), чтобы не копировать repo_dir/.git Папка этого клонированного репо, если у вас нет git в вашем целевом изображении.

    COPY repo_dir .
    

(Вот ' . 'представлять текущий WORKDIR в строящемся изображении)

Другие вопросы по тегам