2017-04-09 2 views
1

Ich habe 2 Container, die ich mit "docker-compose run" für bash iteraction ausführen möchte. Mein Komponist Datei aussehen wie der Balgdocker-compose run, Link zum zuvor laufenden Container

--- 
services: 
    dataBase: 
    image: "mysql:latest" 
    container_name: dataBase 
    environment: 
     MYSQL_ROOT_PASSWORD: SOME_PASSWORD 
     MYSQL_DATABASE: SOME_DATABASE 
    ports: 
     - "3306:3306" 
    volumes: 
     - ../data:/var/lib/mysql 
    api: 
    build: builds/web 
    container_name: api 
    hostname: "api" 
    ports: 
     - "5000:5000" 
    external_links: 
     - dataBase 
    volumes: 
     - ../api:/etc/api 
    working_dir: /etc/api 
    command: npm start 
    nginx: 
    image: nginx:1.11.13-alpine 
    ports: 
     - "8080:80" 
    volumes: 
     - ../nginx/conf.d:/etc/nginx/conf.d/ 
    external_links: 
     - api:api 
    restart: always 
version: "3" 

ich tun:

docker-compose run --service-ports api bash 

dass der api Behälter mit dem Link zur Datenbank initialisiert. Und dann brauche ich die Nginx zu laufen und mit API verknüpft werden, ich konnte das noch nicht tun. Ich tue:

docker-compose run -d --service-ports --no-deps nginx 

Gibt es eine Möglichkeit für mich, diese zwei Läufe getrennt zu machen und immer noch die nginx Verknüpfung zu erreichen. Ich habe external_link versucht, aber das hat es nicht gekappt.

+0

Es ist unklar, was Sie zu erreichen versuchen. Warum nicht einfach 'docker-compose up' und eine separate' docker-compose run api bash'? –

+0

Ich möchte eigentlich 2 Bashs verlinkt haben, da würde ich für Entwicklungszwecke verwenden (eins auf api und eins auf anderen Container, immer noch nicht erstellt). Ich benutzte NGINX als Versuchskaninchen, damit es funktioniert (der Linking-Teil) – FabioCosta

+0

Zusätzlich ist das Nginx ein Reverse-Proxy, also wenn ich api laufen lasse, würde Nginx keine Verbindung zu ihm haben, was den Reverse-Proxy zum Scheitern bringen würde – FabioCosta

Antwort

1

Eine Problemumgehung gefunden. Was ich tat, begann mit der Verwendung von Netzwerken (Links funktionieren würde, ist nur, dass sie legacy sind).

Der Trick besteht darin, den Container, den ich in den Ruhezustand versetzen möchte, dann durch docker-compose exec.

Meine Datei aussehen wie die ein Gebrüll:

--- 
services: 
    dataBase: 
    image: "mysql:latest" 
    container_name: dataBase 
    environment: 
     MYSQL_ROOT_PASSWORD: SOME_PASSWORD 
     MYSQL_DATABASE: SOME_DATABASE 
    volumes: 
     - ../data:/var/lib/mysql 
    networks: 
     - proxy 
    api: 
    build: builds/web 
    container_name: api 
    hostname: api 
    ports: 
     - "5000:5000" 
    depends_on: 
     - dataBase 
    volumes: 
     - ../api:/etc/api 
    working_dir: /etc/api 
    networks: 
     - proxy 
    command: "sleep infinity" #keeps the container alive for 2 way networking to work, test is ran with docker-compose exec 
    nginx: 
    image: nginx:1.11.13-alpine 
    container_name: nginx 
    hostname: nginx 
    ports: 
     - "8080:80" 
    volumes: 
    - ../nginx/conf.d:/etc/nginx/conf.d/ 
    restart: always 
    depends_on: 
     - api 
    networks: 
     - proxy 
networks: 
    proxy: 
    driver: bridge 
version: "3" 

Der Haken ist der Befehl "sleep Unendlichkeit" so mein Workflow ist jetzt:

docker-compose up 
docker-compose exec api bash 

ich die Lösung auf dieser issue gefunden.

Ich denke, es ist gut genug, auch wenn ich ohne den Schlaftrick entkommen könnte, wäre ich glücklicher, vor allem, weil ich den Produktionsbefehl über den Komponisten verlassen wollte.

Verwandte Themen