Docker-Compose (다중 서비스 포함)


103

이것은 샘플 질문입니다! 생산에서 절대로하지 마십시오. NGINX / PHP / 기타 서비스를 별도의 컨테이너에서 실행하십시오!

docker-compose upUbuntu 컨테이너를 시작 하면 ubuntu exited with code 0.

내가 실행 docker run -d -ti -p 80:80 -v ~/sph/laravel52:/www/laravel ubuntu하면 모든 것이 잘 작동합니다.

Docker Compose를 사용하여이 동작을 복제하려면 어떻게해야합니까?

이것은 내 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

그리고 docker-compose.yml:

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

나는 당신이 의도적으로 이것을 할 수 있다는 것을 이해합니다 ENTRYPOINT nginx && service php5-fpm start && /bin/bash. 그러나 그 결정의 의미를 이해하지 못한다면 다음 github.com/phusion/baseimage-docker
Daniel Stefaniuk

Img 이름. 내 오류. Ubuntu
Tim Devlet 2016 년

답변:


236

문제는 -t컨테이너를 실행할 때 옵션을 사용하고 있다는 것입니다 .

컨테이너가 계속 실행되는 docker-compose.yml 파일에서 tty옵션 (참조 참조 )을 활성화했는지 확인할 수 있습니까?

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

4
ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.추가 한 후 오류 메시지가 표시 되었습니까 tty: true?
Winters

1
tty는 의사 터미널을 생성하기 때문에 작동합니다. SQL Server 2017 컨테이너와 비슷한 문제가 발생했습니다. 독립 실행 형 모드에서 제대로 실행 중이었지만 다중 컨테이너 시나리오의 경우 도커 작성 모드에서 종료되었습니다. 여기에 내가 그것을 해결하기 위해 청각 장애했던 것입니다 handsonarchitect.com/2018/01/...
Nilesh 접합 제

@NileshGule tty가 작동하는 이유를 설명 해주셔서 감사합니다.하지만 괜찮으 시다면 조금 더 알고 싶습니다. 의사 터미널을 정확히 생성하면 종료되지 않습니다. 다시 한 번 감사드립니다.
Luis Milanese

3
@LuisMilanese는 일반적으로 포 그라운드 프로세스가 도커 컨테이너 내에서 완료 될 때 작업이 완료된 것으로 가정하고 컨테이너 인스턴스를 정리합니다. 그러나 데이터베이스 엔진 및 웹 서버와 같은 것은 계속 실행되어야합니다. 의사 터미널을 만들면 컨테이너가 살아 있습니다. tty를 사용하거나 사용하지 않고 docker logs << container name >> 명령을 실행하여이 워크 플로를 볼 수 있습니다.
Nilesh Gule

tty는 나를 위해 작동하지 않습니다 .. 나는 docker-compose의 "3"버전을 사용하고 있습니다
Sanjay Salunkhe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.