Docker-Compose具有多种服务


103

这是一个示例问题!绝不生产。在单独的容器中运行NGINX / PHP /其他服务!

启动时docker-compose up,Ubuntu容器退出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,2016年

图名。我的错 Ubuntu
Tim Devlet

Answers:


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
2016年

1
tty之所以起作用是因为它创建了一个伪终端。我对SQL Server 2017容器有类似的问题。它在独立模式下运行良好,但在多容器场景下以docker-compose模式退出。以下是我与TTY修复它handsonarchitect.com/2018/01/...
Nilesh制作Gule

@NileshGule感谢您抽出宝贵的时间解释tty为什么起作用,但是,如果您不介意的话,我想了解更多。如何精确地创建伪终端会阻止退出?再次感谢。
路易斯·米兰尼斯

3
@LuisMilanese通常在docker容器中完成前台进程时,会假定作业已完成并清理容器实例。但是,诸如数据库引擎和Web服务器之类的东西需要继续运行。通过创建伪终端,容器可以保持活动状态。您可以通过运行带有和不带tty的docker logs << container name >>命令来查看此工作流程
Nilesh Gule,

tty对我不起作用..我正在使用版本3的
docker
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.