2017-02-15 1 views
1

У меня есть этот Dockerfile:Мостовое подключение к сети в Dockerfile

FROM php:5.6-cli 
VOLUME /usr/src/up 
WORKDIR /usr/src/up 
RUN docker-php-source extract \ 
&& docker-php-ext-install pdo pdo_mysql 
&& docker-php-source delete 

RUN echo "date.timezone = Europe/Paris" >> /usr/local/etc/php/php.ini \ 

Это один создать новую виртуальную машину с PHP 5.6, установить PDO и Pdo_Mysql расширения и указать часовой пояс в php.ini.

Проблема в том, что по умолчанию виртуальная машина имеет «IP-адрес сети NAT». Из-за этого, сценарии с FTP-соединения не работают, я получил эту ошибку:

Warning: ftp_get(): I won't open a connection to 172.17.0.2 (only to x.x.x.x) 

Так что я хотел бы моя виртуальная машина имеет «IP-адрес Мостовой сети», и получает свой IP-адрес от моего DHCP.

Как я могу это сделать? Могу ли я включить это в файл Docker, чтобы облегчить работу для других людей?

Заранее благодарен!

С наилучшими пожеланиями, Томас

+0

Не является прямым ответом на ваш вопрос; но вы рассматривали использование FTP в пассивном режиме (используя ['ftp_pasv'] (http://php.net/manual/en/function.ftp-pasv.php))? В общем, пассивный FTP должен лучше работать за шлюзом NAT. – helmbert

+0

Да, но я не делаю сценариев к сожалению, и я не могу изменять их все время :( – Toma

ответ

3

По умолчанию Docker сервер создает мост по умолчанию, но you can create your own bridge network и назначьте контейнер для этого пользовательского моста на старте. Или вы можете использовать команду docker network, которая кажется более простой. Таким образом, вы можете указать диапазон IP, соответствующий вашим настройкам DHCP.

Создать свой собственный мост

docker network create --driver=bridge \ 
--subnet=192.168.127.0/24 --gateway=192.168.127.1 \ 
--ip-range=192.168.127.128/25 yourbridge 

Выполнить контейнер, используя свой собственный мост;

docker run -d --net=yourbridge .. 

Смотрите этот блог для конкретного примера: http://www.dasblinkenlichten.com/docker-networking-101-user-defined-networks/

В пределах определенного пользователя сети моста, сшивание не поддерживается. Вы, , можете открывать и публиковать контейнерные порты в контейнерах в этой сети. Это полезно, если вы хотите сделать часть сети моста доступной во внешней сети.

enter image description here

+2

Большое спасибо за ваш ответ! :-) Я попытался интегрировать команду docker network в файл Docker, но, видимо, это неправильный способ сделать. Должен ли я делать это отдельно от файла Dockerfile? Я хотел бы поместить максимум в Dockerfile, чтобы упростить сборку для других пользователей фьючерсов. Заранее благодарен, С уважением Thomas – Toma

+0

Я не думаю, что вы можете указать сеть в файле Dockerfile. Но как вы теперь используете эти докерные контейнеры? Вы можете создать сценарий bash, который создает собственный мост и запускает ваш контейнер, подключая его к мосту. Однако это не похоже на сценарий по умолчанию для других людей.Пробовали ли вы выставлять порты с «-p» во внешние сети, прежде чем идти по длинному мосту? Здесь что-то не так. – mass

+0

Говоря об этом https://docs.docker.com/engine/reference/builder/#expose – mass

Смежные вопросы