Как получить доступ к локальному хосту машины Хоста 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
в строящемся изображении)