2017-02-15 2 views
1

Ich habe diese Dockerfile:Bridged Netzwerkverbindung in 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 \ 

Diese erstellen eine neue virtuelle Maschine mit PHP 5.6, gU und pdo_mysql Erweiterungen und geben Sie die Zeitzone in der php.ini installieren.

Das Problem, das ich habe, ist, dass die virtuelle Maschine standardmäßig eine 'NAT-Netzwerk-IP-Adresse' hat. Dieser Grund, Skripte mit FTP-Verbindungen nicht funktionieren, habe ich diesen Fehler habe:

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

So würde ich meine virtuelle Maschine gerne hat eine ‚Bridged Netzwerk-IP-Adresse‘, und seine IP-Adresse von meinem DHCP.

Wie kann ich das tun? Könnte ich das in die Dockerfile aufnehmen, um die Arbeit für andere Leute zu erleichtern?

Vielen Dank im Voraus!

Mit freundlichen Grüßen, Thomas

+0

keine direkte Antwort auf Ihre Frage; Aber haben Sie darüber nachgedacht, FTP im Passiv-Modus zu verwenden (mit ['ftp_pasv'] (http://php.net/manual/en/function.ftp-pasv.php))? Im Allgemeinen sollte passives FTP hinter einem NAT-Gateway besser funktionieren. – helmbert

+0

Ja, aber ich mache die Skripte leider nicht, und ich kann sie nicht ständig ändern :( – Toma

Antwort

3

standardmäßig Docker Server erstellt eine Standard-Brücke aber you can create your own bridge network und Ihren Container auf Start in diese benutzerdefinierten Brücke zuweisen. Oder Sie können den Befehl docker network verwenden, der ein einfacherer Pfad zu sein scheint. Auf diese Weise können Sie den IP-Bereich für Ihre DHCP-Einstellungen festlegen.

Erstellen Sie Ihre eigene Brücke

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

Führen Sie den Behälter Ihrer benutzerdefinierten Brücke verwendet wird;

docker run -d --net=yourbridge .. 

dieses Blog-Post für ein konkretes Beispiel Siehe: http://www.dasblinkenlichten.com/docker-networking-101-user-defined-networks/

Innerhalb einer benutzerdefinierten Brücke Netzwerk, Vernetzung nicht unterstützt wird. Sie können Container-Ports in Containern in diesem Netzwerk verfügbar machen und veröffentlichen. Dies ist nützlich, wenn Sie einen Teil des Brückennetzwerks für ein externes Netzwerk verfügbar machen möchten.

enter image description here

+2

Vielen Dank für Ihre Antwort! :-) Ich habe versucht, den docker Netzwerkbefehl in die Dockerfile zu integrieren, aber anscheinend Es ist nicht der richtige Weg. Muss ich es separat von der Dockerfile tun? Ich möchte das Maximum in die Dockerfile setzen, um den Build für andere Futures-Benutzer zu vereinfachen. Vielen Dank im Voraus, Mit freundlichen Grüßen Thomas – Toma

+0

Ich glaube nicht, dass Sie Netzwerk in Dockerfile angeben können. Aber wie laufen Sie jetzt diese Docker-Container? Sie können ein Bash-Skript erstellen, das eine benutzerdefinierte Bridge erstellt und Ihren Container mit der Bridge verbindet. Für andere Menschen ist das jedoch kein Standard-Szenario.Haben Sie versucht, Ports mit '-p' externen Netzwerken auszusetzen, bevor Sie den langen Bridge-Weg gehen? Etwas fühlt sich hier nicht richtig an. – mass

+0

Wenn Sie darüber sprechen https://docs.docker.com/engine/reference/builder/#expose – mass

Verwandte Themen