Docker-Compose avec plusieurs services

103

CECI EST UN EXEMPLE DE QUESTION! NE JAMAIS LE FAIRE EN PRODUCTION. EXÉCUTEZ NGINX / PHP / AUTRES SERVICES DANS DES CONTENEURS SÉPARÉS!

Lorsque je démarre, docker-compose uple conteneur Ubuntu se termine avec ubuntu exited with code 0.

Quand je cours docker run -d -ti -p 80:80 -v ~/sph/laravel52:/www/laravel ubuntu, tout fonctionne bien.

Comment puis-je répliquer ce comportement à l'aide de Docker Compose?

C'est mon 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

Et docker-compose.yml:

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"
Tim Devlet
la source
Je comprends que vous pouvez le faire dans un but précis ENTRYPOINT nginx && service php5-fpm start && /bin/bash. Mais si vous ne comprenez pas les implications de cette décision, vous pouvez lire ce qui suit github.com/phusion/baseimage-docker
Daniel Stefaniuk
Nom img. Mon erreur. Ubuntu
Tim Devlet

Réponses:

236

Le fait est que vous utilisez l'option -tlors de l'exécution de votre conteneur.

Pourriez-vous vérifier si l'activation de l' ttyoption (voir référence ) dans votre fichier docker-compose.yml le conteneur continue de fonctionner?

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"
        tty: true
JésusTinoco
la source
4
Avez-vous reçu un message d'erreur: ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.après avoir ajouté tty: true?
Winters
1
tty fonctionne car il crée un pseudo terminal. J'ai eu un problème similaire avec le conteneur SQL Server 2017. Il fonctionnait bien en mode autonome mais sortait en mode docker-compose pour le scénario multi-conteneurs. Voici ce que j'ai fait avec tty pour le réparer handsonarchitect.com/2018/01
Nilesh Gule
@NileshGule merci pour votre temps pour expliquer pourquoi tty fonctionne, cependant, j'aimerais en savoir un peu plus, si cela ne vous dérange pas. Comment créer exactement un pseudo-terminal empêchera-t-il de sortir? Merci encore.
Luis Milanese
3
@LuisMilanese généralement lorsque le processus de premier plan se termine dans le conteneur Docker, il suppose que le travail est terminé et nettoie l'instance de conteneur. Mais des éléments tels que le moteur de base de données et les serveurs Web doivent continuer à fonctionner. En créant un pseudo terminal, le conteneur reste en vie. Vous pouvez voir ce flux de travail en exécutant la commande docker logs << container name >> avec et sans tty
Nilesh Gule
tty ne fonctionne pas pour moi ..
j'utilise la