Docker-Compose mit mehreren Diensten


103

Dies ist eine Beispielfrage! NIEMALS IN DER PRODUKTION TUN. RUN NGINX / PHP / ANDERE DIENSTLEISTUNGEN IN GETRENNTEN BEHÄLTERN!

Wenn ich starte, wird docker-compose upder Ubuntu-Container mit beendet ubuntu exited with code 0.

Wenn ich renne docker run -d -ti -p 80:80 -v ~/sph/laravel52:/www/laravel ubuntu, funktioniert alles gut.

Wie kann ich dieses Verhalten mit Docker Compose replizieren?

Das ist mein Dockerfile:

# Version: 0.0.1
FROM ubuntu:15.04



ENV DEBIAN_FRONTEND noninteractive

#INSTALL ALL
RUN apt-get update && apt-get install -y  \
       nano \
       php5-fpm \
       php5-mysql \
       nginx



#NGINX CONF
ADD nginx/sites-available/laravel.conf /etc/nginx/sites-available/
RUN rm /etc/nginx/sites-available/default
RUN mv /etc/nginx/sites-available/laravel.conf /etc/nginx/sites-available/default

VOLUME /www


ENTRYPOINT nginx && service php5-fpm start && /bin/bash

CMD ["true"]


EXPOSE 80

Und docker-compose.yml:

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"

Ich verstehe, dass Sie dies absichtlich tun können ENTRYPOINT nginx && service php5-fpm start && /bin/bash. Aber wenn Sie die Auswirkungen dieser Entscheidung nicht verstehen, können Sie den folgenden github.com/phusion/baseimage-docker
Daniel Stefaniuk

Img Name. Mein Fehler. Ubuntu
Tim Devlet

Antworten:


236

Die Sache ist, dass Sie die Option verwenden, -twenn Sie Ihren Container ausführen.

Können Sie überprüfen, ob die ttyOption (siehe Referenz ) in Ihrer Datei docker-compose.yml aktiviert ist und der Container weiterhin ausgeführt wird?

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"
        tty: true

4
Haben Sie eine Fehlermeldung erhalten: ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.nachdem Sie hinzugefügt haben tty: true?
Winter

1
tty funktioniert, weil es ein Pseudo-Terminal erstellt. Ich hatte ein ähnliches Problem mit dem SQL Server 2017-Container. Es lief einwandfrei im Standalone-Modus, wurde jedoch im Docker-Compose-Modus für ein Szenario mit mehreren Containern beendet. Hier ist, was ich mit tty gemacht habe, um es zu beheben handsonarchitect.com/2018/01/…
Nilesh Gule

@NileshGule, danke für deine Zeit, um zu erklären, warum tty funktioniert. Ich würde jedoch gerne etwas mehr wissen, wenn es dir nichts ausmacht. Wie genau verhindert das Erstellen eines Pseudo-Terminals das Beenden? Danke noch einmal.
Luis Milanese

3
@LuisMilanese Im Allgemeinen wird beim Abschluss des Vordergrundprozesses im Docker-Container davon ausgegangen, dass der Job abgeschlossen ist, und die Containerinstanz wird bereinigt. Aber Dinge wie Datenbankmodul und Webserver müssen weiter ausgeführt werden. Durch das Erstellen eines Pseudo-Terminals bleibt der Container am Leben. Sie können diesen Workflow sehen, indem Sie den Befehl Docker-Protokolle << Containername >> mit und ohne tty
ausführen

tty funktioniert nicht für mich .. Ich benutze Version "3" von Docker-Compose
Sanjay Salunkhe
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.