2017-05-14 2 views
1

Ich bin Docker Maschinenserver ausgeführt, wo ich Docker Instanzen ausführen. Ich möchte mehrere Server (Instanzen) von der gleichen Docker-Compose-Datei in einem anderen Ordner ausführen.Docker komponieren neues Bild und Instanz

Ich habe zwei Dockerfile konfiguriert. Einer ist mysql und der andere ist für nodejs. Hier ist das Beispiel:

FROM node:alpine 
RUN npm install -g nodemon 
RUN npm install -g pm2 
ADD package.json package.json 
RUN npm install 
EXPOSE 3000 

nun wie folgt ich diejenigen, die aus laufen Docker-komponieren:

version: '2' 
services: 
    service: 
     build: 
      context: . 
      dockerfile: Dockerfile-server 
     container_name: server 
     ports: 
     - "2000:3000" 
     restart: always 
     working_dir: /home/app 
     volumes: 
     - ./:/home/app 
     command: sh -c 'nodemon' 
    db: 
     build: 
      context: . 
      dockerfile: Dockerfile-mysql 
     container_name: mysql 
     restart: always 
     volumes: 
     - ../mysql:/var/lib/mysql 
     ports: 
     - "3306:3306" 

Wenn ich neue Umgebung-Ordner hinzufügen (Ordner mit diesen Dateien und einige NodeJS stopft aktualisiert) und versuche, docker-compose auszuführen. Es stoppt bereits Docker mit den gleichen Setups und erstellt das neu.

Wie kann ich mehrere Instanzen von der gleichen docker-compose Datei ausführen?

+0

Können Sie einige Informationen hinzufügen, z. B. die genauen Befehle, die Sie ausführen, und die Ordner/Struktur, in denen sie ausgeführt werden? – johnharris85

Antwort

1

Wie ist: Sie können nicht, weil Sie nur einen 3306-Port auf Ihrem Host-Rechner haben. Aber wenn Sie docker schreiben lassen, können Sie docker-compose scale SERVICE=N verwenden, wobei SERVICE der Name Ihres Dienstes ist und N die Anzahl der Kopien. Zum Beispiel Whit dieses comnfiguration:

version: '2.1' 

services: 
    client: 
    image: explorer-client 
    ports: 
     - 80:80 
     - 443:443 
    depends_on: 
     - server 
    networks: 
     - client-server 
     - client-watcher 
    server: 
    image: explorer-server 
    depends_on: 
     - redis 
    networks: 
     - client-server 
     - server 

networks: 
    client-server: 
    driver: bridge 
    server: 
    driver: bridge 

Sie den Server-Dienst, indem Sie docker-compose scale server=2 skaliert werden können, weil es ist nicht explizit an den Client von einem Port verbunden.

+0

Sie haben Recht, aber Sie haben vergessen, die 'container-name'-Zeile aus der' docker-compose'-Datei zu entfernen. Aber das ist der Sitz der Probleme. –