2017-03-12 24 views
8

ja próbuje stworzyć sieć w Docker-compose.vs.debug.yml Network File:Docker Compose - dodanie identyfikatora z nazwa

networks: 
    myNetwork: 
    driver: bridge 

Ale doker dodając kilka Identyfikator:

ls sieciowych doker ->

NETWORK ID   NAME           DRIVER    SCOPE 
0e1fec1a9a30  dockercompose1163770330_myNetwork   bridge    local 

Jeśli istnieje opcja aby wymienić go tak:

NETWORK ID   NAME           DRIVER    SCOPE 
0e1fec1a9a30  myNetwork         bridge    local 

Potrzebuję go do automatycznego połączenia dwóch kontenerów na osobnych projektach.

Odpowiedz

7

Jeśli masz funkcję tworzenia dokerów, stwórz sieć, to sama określa nazwę. Zwykle sprawdza nazwę katalogu, w którym znajduje się docker-compose.yml, i używa go jako prefiksu. Na podstawie podanej nazwy okazało się, że ten plik dokowanego compose.yml znajduje się w katalogu o nazwie dockercompose1163770330. Łączy to z podaną nazwą myNetwork i tworzy sieć o nazwie dockercompose1163770330_myNetwork.

Jeśli chcesz kontrolować dokładną nazwę sieci, masz dwie opcje.

  1. Użyj sieci utworzonej poza funkcją dokowania (sieć "zewnętrzna").
networks: 
    default: 
    external: 
     name: myNetwork 

Oznacza to coś innego stworzył już sieć. Jeśli nie masz już takiej sieci, jej utworzenie jest łatwe.

docker network create myNetwork 
  1. (jeśli to możliwe) określić jak visual studio IT nazwy ścieżki i zmienić tę ścieżkę do czegoś statycznego. Czy to możliwe, czy jak, nie mam pojęcia. Ale jeśli możesz kontrolować dockercompose1163770330 i zrobić to coś innego, co wolisz, możesz przewidzieć nazwę sieci utworzoną z niego.
+0

Dziękuję za odpowiedź, ale chcę zautomatyzować tworzenie sieci z kodu (z pliku docker-compose.vs.yml), jeśli sieć nie istnieje bez użycia cmd. Opcja z zewnętrznym działa tylko z pełną nazwą sieci: dockercompose1163770330_myNetwork, nie mogę polegać na tym, że ta nazwa będzie taka sama z powodu identyfikatora –

+0

@MarkSabakov Powinien być utworzony w oparciu o katalog, w którym się znajduje. Zgaduję, że ten identyfikator jest przychodzące z innego narzędzia (np. oznaczonego tagiem VS2017 lub czegoś innego). Funkcja docker-compose sama pobiera tę nazwę z nazwy katalogu, w którym jest przechowywana. –

+0

@MarkSabakov [Docker Compose nie może utworzyć sieci] (https://github.com/docker/compose/issues/2846) dla ciebie. – Matt

2

Zakładam, że korzystasz z dcproj VS2017. Rozwiązałem to, tworząc sieć ręcznie w projekcie dcproj jako PreBuildEvent. Dodaj cel prebuild do pliku .dcproj:

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

Następnie w plikach Döcker-Compose można określić sieć zewnętrzna:

networks: 
    default: 
    external: 
     name: customnetwork 

wymaga uruchomienia dcproj przed innymi projektami lub dodaj ten sam prebuild exec dla wszystkich projektów, które powinny współdzielić sieć.