当我编写docker-compose up时,Django-apache2以代码0退出

时间:2019-11-13 13:25:48

标签: python django docker docker-compose

我创建了Dockerfile和docker-compose,但是当我写docker-compose up

时,此错误django-apache2出现了错误0

Dockerfile

FROM ubuntu:18.04
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get -y install python3.8
RUN apt-get -y install python3-pip
RUN apt -y install apache2
RUN apt-get install -y apt-utils vim curl apache2 apache2-utils
RUN apt-get -y install python3 libapache2-mod-wsgi-py3
RUN pip3 install --upgrade pip
COPY ./requirements.txt ./requirements.txt
RUN  apt-get -y install python3-dev
RUN apt-get -y install python-dev default-libmysqlclient-dev
RUN pip3 install -r ./requirements.txt
COPY ./apache.conf /etc/apache2/sites-available/000-default.conf
RUN mkdir /var/www/api/
COPY ./project/. /var/www/api/
WORKDIR /project/

Docker-compose

version: "3"
services:
 django-apache2:
  container_name: "django-apache2"
  build: .
  ports:
   - "8005:80"

3 个答案:

答案 0 :(得分:0)

您的容器缺少可运行的内容。您需要向您的Dockerfile添加一条CMDENTRYPOINT指令。

这就是为什么您看到这样的消息的原因,这不是错误。该消息告诉您容器django-apache2已正确完成(退出状态0),这是因为您正在运行基本映像ubuntu,该映像不执行任何操作。

答案 1 :(得分:0)

首先,我们需要了解Docker容器运行单个命令。只要启动命令的进程正在运行,该容器就会一直在运行。该过程完成并退出后,容器将停止。

有了这种理解,我们可以假设您的情况正在发生。当您启动服务时,没有命令。此时,Docker容器已停止,因为该进程已退出(状态为0)。

因此,您需要添加可在docker上继续运行的命令。

检查此链接以获取更多信息Here

答案 2 :(得分:0)

此方法的问题归因于www-data apache2用户。如果您从Dockerfile安装python软件包,将为超级用户安装它们,而www-data apache用户将无法访问这些软件包。 我尝试使用pip创建新的venv,并且发生相同的问题。从超级用户在python虚拟环境中安装的软件包未安装在venv文件夹内。 我在github中创建了一个新的存储库,解释了使用miniconda3作为python软件包管理器以及使用sudo -u以不同用户身份运行命令的不同方法。 我正在尝试使用pip解决此问题。更改将发布在存储库中。

我希望这对您有用。