【问题标题】:Docker-Compose with multiple servicesDocker-Compose 与多个服务
【发布时间】:2020-10-08 23:24:09
【问题描述】:

这是一个示例问题!永远不要在生产中这样做。在单独的容器中运行 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
  • 图片名称。我的错误。 Ubuntu
  • 我在将 ruby​​ 添加到 centos Dockerfile 时遇到了类似的问题。所以我使用了'RUN yum update && yum install -y ruby​​'

标签: docker docker-compose


【解决方案1】:

问题是您在运行容器时使用了选项-t

您能否检查是否在容器继续运行的 docker-compose.yml 文件中启用了tty 选项(请参阅reference)?

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

【讨论】:

  • 添加tty: true后是否收到错误消息:ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
  • tty 之所以有效,是因为它创建了一个伪终端。我在 SQL Server 2017 容器中遇到了类似的问题。它在独立模式下运行良好,但在多容器场景的 docker-compose 模式下退出。这是我对 tty 所做的修复它handsonarchitect.com/2018/01/…
  • @NileshGule 感谢您花时间解释为什么 tty 有效,但是,如果您不介意,我想知道更多。究竟创建一个伪终端将如何防止退出?再次感谢。
  • @LuisMilanese 通常当前台进程在 docker 容器内完成时,它假定作业已完成并清理容器实例。但是像数据库引擎和 Web 服务器这样的东西需要继续运行。通过创建一个伪终端,容器保持活动状态。您可以通过运行 docker logs > 命令(带和不带 tty)来查看此工作流程
  • tty 不适合我.. 我正在使用版本“3”的 docker-compose
猜你喜欢
  • 1970-01-01
  • 2022-12-31
  • 2020-12-28
  • 2018-08-05
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 2017-04-05
  • 2020-02-16
相关资源
最近更新 更多