2017-03-12 3 views
8

I Netzwerk in Docker-compose.vs.debug.yml-Datei zu erstellen versuchen:Docker Compose - Hinzufügen Bezeichnernamen zu vernetzen

networks: 
    myNetwork: 
    driver: bridge 

Aber Docker Hinzufügen einiger Bezeichner:

Docker Netzwerk ls ->

NETWORK ID   NAME           DRIVER    SCOPE 
0e1fec1a9a30  dockercompose1163770330_myNetwork   bridge    local 

Wenn es irgendeine Möglichkeit, es so zu nennen:

NETWORK ID   NAME           DRIVER    SCOPE 
0e1fec1a9a30  myNetwork         bridge    local 

Ich brauche es, um zwei Container in separaten Projekten automatisch zu verbinden.

Antwort

7

Wenn Sie docker-compose das Netzwerk erstellen, wird es den Namen selbst bestimmen. Normalerweise wird der Name des Verzeichnisses angezeigt, in dem sich docker-compose.yml befindet, und dieses wird als Präfix verwendet. Basierend auf dem Namen, den Sie angezeigt haben, scheint sich diese docker-compose.yml-Datei in einem Verzeichnis mit dem Namen dockercompose1163770330 zu befinden. Er kombiniert diesen Namen mit dem von Ihnen angegebenen Namen und erstellt ein Netzwerk mit dem Namen dockercompose1163770330_myNetwork.

Wenn Sie den genauen Namen des Netzwerks steuern möchten, haben Sie zwei Möglichkeiten.

  1. Verwenden Sie ein Netzwerk, das außerhalb von docker-compose (einem "externen" Netzwerk) erstellt wurde.
networks: 
    default: 
    external: 
     name: myNetwork 

Dies bedeutet, etwas anderes das Netzwerk bereits geschaffen hat. Wenn Sie ein solches Netzwerk noch nicht haben, ist die Erstellung einfach.

docker network create myNetwork 
  1. (falls möglich) bestimmt, wie visual-studio Namen es Pfade, und diesen Weg zu statisch etwas ändern. Ob das möglich ist oder wie, ich habe keine Ahnung. Aber wenn Sie dockercompose1163770330 steuern und etwas anderes machen können, das Sie bevorzugen, dann können Sie den daraus erzeugten Netzwerknamen vorhersagen.
+0

Vielen Dank für die Antwort, aber ich möchte die Erstellung des Netzwerks von Code (von docker-compose.vs.yml-Datei) zu automatisieren, wenn das Netzwerk nicht existiert, ohne cmd zu verwenden. Option mit externen Arbeiten nur mit vollem Netzwerknamen: dockercompose1163770330_myNetwork, ich kann nicht darauf vertrauen, dass dieser Name wegen des Identifikators –

+0

@MarkSabakov ist Es soll es basierend auf dem Verzeichnis erstellen, in dem es gefunden wird. Ich rate diesen Bezeichner ist von einem anderen Tool kommen (z. B. VS2017, das Sie markiert haben, oder etwas anderes). docker-compose selbst erhält diesen Namen aus dem Namen des Verzeichnisses, in dem er gespeichert ist. –

+0

@MarkSabakov [Docker Compose kann das Netzwerk nicht erstellen] (https://github.com/docker/compose/issues/2846) für Sie. – Matt

2

Ich nehme an, Sie verwenden eine VS2017 dcproj. Ich habe das gelöst, indem ich das Netzwerk manuell im dcproj-Projekt als PreBuildEvent erstellt habe. Fügen Sie ein vorkompilierte Ziel der .dcproj Datei:

<Target Name="PreBuild" BeforeTargets="PreBuildEvent"> 
    <Exec Command="echo Creating external docker network" /> 
    <Exec Command="docker network create customnetwork" IgnoreExitCode="true" /> 
</Target> 

Dann in Ihren Docker-compose Dateien, die Sie ein externes Netzwerk angeben:

networks: 
    default: 
    external: 
     name: customnetwork 

Benötigen Sie die dcproj vor anderen Projekten zu beginnen oder fügen Sie die Die gleiche Prebuild-Exec für alle Projekte, die sich das Netzwerk teilen sollten.