Docker-Compose z wieloma usługami

103

TO PRZYKŁADOWE PYTANIE! NIGDY NIE ROBIĆ TEGO W PRODUKCJI. URUCHOM NGINX / PHP / INNE USŁUGI W ODDZIELNYCH KONTENERACH!

Kiedy uruchamiam, docker-compose upkontener Ubuntu wychodzi z ubuntu exited with code 0.

Kiedy biegam docker run -d -ti -p 80:80 -v ~/sph/laravel52:/www/laravel ubuntu, wszystko działa dobrze.

Jak mogę replikować to zachowanie przy użyciu Docker Compose?

To jest moje 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

Oraz docker-compose.yml:

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"
Tim Devlet
źródło
Rozumiem, że możesz to zrobić celowo ENTRYPOINT nginx && service php5-fpm start && /bin/bash. Ale jeśli nie rozumiesz konsekwencji tej decyzji, możesz przeczytać następujący github.com/phusion/baseimage-docker
Daniel Stefaniuk
Img name. Mój błąd. Ubuntu
Tim Devlet

Odpowiedzi:

236

Chodzi o to, że używasz tej opcji -tpodczas uruchamiania kontenera.

Czy możesz sprawdzić, czy po włączeniu tej ttyopcji (patrz odniesienie ) w pliku docker-compose.yml kontener nadal działa?

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"
        tty: true
JesusTinoco
źródło
4
Czy pojawił się komunikat o błędzie: ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.po dodaniu tty: true?
Winters
1
tty działa, ponieważ tworzy pseudoterminal. Miałem podobny problem z kontenerem SQL Server 2017. Działał dobrze w trybie autonomicznym, ale wychodził w trybie docker-compose dla scenariusza z wieloma kontenerami. Oto, co zrobiłem z tty, aby to naprawić handsonarchitect.com/2018/01/...
Nilesh Gule
@NileshGule dziękuję za poświęcony czas na wyjaśnienie, dlaczego tty działa, jednak chciałbym dowiedzieć się trochę więcej, jeśli nie masz nic przeciwko. Jak dokładnie utworzenie pseudoterminala zapobiegnie wyjściu? Dzięki jeszcze raz.
Luis Milanese
3
@LuisMilanese ogólnie po zakończeniu procesu pierwszego planu w kontenerze docker zakłada, że ​​zadanie jest zakończone i czyści instancję kontenera. Ale takie rzeczy, jak silnik bazy danych i serwery internetowe, muszą nadal działać. Dzięki stworzeniu pseudoterminalu kontener pozostaje żywy. Możesz zobaczyć ten przepływ pracy, uruchamiając polecenie docker logs << container name >> z tty i bez
Nilesh Gule
tty nie działa dla mnie .. używam wersji „3” Döcker-Compose
Sanjay Salunkhe