Docker-Compose con più servizi


103

QUESTA È UNA DOMANDA DI CAMPIONE! NON FARLO MAI IN PRODUZIONE. ESEGUI NGINX / PHP / ALTRI SERVIZI IN CONTENITORI SEPARATI!

Quando avvio docker-compose upil contenitore di Ubuntu esce con ubuntu exited with code 0.

Quando corro docker run -d -ti -p 80:80 -v ~/sph/laravel52:/www/laravel ubuntu, tutto funziona bene.

Come posso replicare questo comportamento utilizzando Docker Compose?

Questo è il mio 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

E docker-compose.yml:

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

Capisco che tu possa farlo apposta ENTRYPOINT nginx && service php5-fpm start && /bin/bash. Ma se non capisci le implicazioni di tale decisione potresti leggere il seguente github.com/phusion/baseimage-docker
Daniel Stefaniuk

Img nome. Errore mio. Ubuntu
Tim Devlet

Risposte:


236

Il fatto è che stai usando l'opzione -tquando esegui il tuo contenitore.

Potresti controllare se abilitando l' ttyopzione (vedi riferimento ) nel tuo file docker-compose.yml il contenitore continua a funzionare?

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

4
Hai ricevuto un messaggio di errore: ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.dopo aver aggiunto tty: true?
Inverni

1
tty funziona perché crea uno pseudo terminale. Ho avuto un problema simile con il contenitore di SQL Server 2017. Funzionava bene in modalità standalone ma usciva in modalità docker-compose per uno scenario multi-container. Ecco cosa ho fatto con tty per risolverlo handsonarchitect.com/2018/01/…
Nilesh Gule

@NileshGule grazie per il tuo tempo per spiegare perché tty funziona, tuttavia, mi piacerebbe saperne di più, se non ti dispiace. In che modo esattamente la creazione di uno pseudo terminale impedirà di uscire? Grazie ancora.
Luis Milanese

3
@LuisMilanese generalmente quando il processo in primo piano viene completato all'interno del contenitore docker, presume che il lavoro sia stato completato e pulisce l'istanza del contenitore. Ma cose come il motore di database e i server web devono continuare a funzionare. Creando uno pseudo terminale il container rimane in vita. Puoi vedere questo flusso di lavoro eseguendo il comando Docker Log << nome contenitore >> con e senza tty
Nilesh Gule

tty non funziona per me .. sto usando la versione "3" di docker-compose
Sanjay Salunkhe
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.