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"

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.