当前位置: 首页 > 知识库问答 >
问题:

组合容器已退出,代码为0,并将其记录为空

胥康安
2023-03-14

我需要用docker将Django Web项目打包。我将项目分为仪表板、api服务器和数据库。当我键入docker compose up时,它打印api服务器退出,代码为0,api服务器容器退出(0),并且我键入docker日志api服务器,它返回空,但其他容器正常。我不知道如何检查这个问题。

api服务器目录结构如下

api-server
    server/
    Dockerfile
    requirements.txt
    start.sh
    ...
    ...

一些yml内容如下所示

dashboard:
    image: nginx:latest
    container_name: nginx-dashboard
    volumes:
      - /nginx/nginx/default:/etc/nginx/conf.d/default.conf:ro
      - /nginx/dist:/var/www/html:ro
    ports:
      - "80:80"
    depends_on:
      - api-server
  api-server:
    build: /api-server
    container_name: api-server
    volumes:
      - /api-server:/webapps
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres
    container_name: Postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=postgres
    ports:
      - "5432:5432"

api服务器的一些Dockerfile内容如下

FROM python:3.6
ENV PYTHONUNBUFFERED 1

RUN mkdir /webapps
WORKDIR /webapps

RUN apt-get clean && apt-get update && apt-get upgrade -y && apt-get install -y python3-pip libpq-dev apt-utils
COPY ./requirements.txt /webapps/
RUN pip3 install -r /webapps/requirements.txt

COPY . /webapps/

CMD ["bash","-c","./start.sh"]

开始具体如下:

#!/usr/bin/env bash
cd server/
python manage.py runserver 0.0.0.0:8000

键入docker组合结果如下

root@VM:/home/test/Documents/ComposeTest# docker-compose up
Creating network "composetest_default" with the default driver
Creating Postgres ... done
Creating api-server     ... done
Creating dashboard ... done
Attaching to Postgres, api-server, dashboard
Postgres | The files belonging to this database system will be owned by user "postgres".
Postgres | This user must also own the server process.
...
...
api-server exited with code 0
api-server exited with code 0

docker日志api服务器为空

如果你们能告诉我如何检查这个问题,我将非常感激,最好提供一个解决方案。


共有1个答案

秦学林
2023-03-14

您已经在构建期间将api服务器复制到Dockerfile,这应该可以正常工作,但在Docker compose中,它会覆盖所有pip包和代码。

    volumes:
      - /api-server:/webapps

从Docker compose中删除卷,它应该可以工作。

第二件事是设置bash脚本的权限。

COPY . /webapps/
RUN chmod +x ./start.sh

第三件事,你确实需要使用bash运行python,因为在bash中没有CMD不能执行的东西,所以为什么不作为CMD呢?

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
 类似资料:
  • 问题内容: 每当我运行任何代码时,控制台始终以结尾。 例如,如果我只打印(“ hellow”): 有什么办法可以使输出“成螺旋形”? 问题答案: 您知道它不是输出的一部分吗?这只是IDE控制台提供的其他信息。实际程序只是按预期输出。 这样说意味着一切正常。如果程序中发生异常,否则将使用非零参数生成,IDE将通知您有关此信息,这是有用的调试信息。 在生产中,您不应该从IDE运行Python程序,因此

  • 我正在研究lib,它使用了很多文件系统函数。 我想要的是,我的函数根据errno返回各种错误代码(而不仅仅是-1作为错误),以防文件系统函数失败。 虽然我可以直接使用errno值,但我希望在函数,错误代码和系统errno之间创建一些抽象层(例如,我的错误值从-1000开始,并且是负值,而errno值是正值)。 我的问题是什么是最好的实现方式。 现在我看到两种可能的解决方案: 使用带有错误代码的枚举

  • 问题内容: 我正在尝试使用docker-compose服务启动容器,但不幸的是, 容器退出了代码0 。容器的建立要归功于.tar.gz归档文件中的存储库。这个档案是一个Centos VM。 我想从同一档案创建6个容器。我想创建一个docker-compose.yml文件,而不是键入6次docker命令,我可以在其中总结其命令和标签。 我已经开始写docker-compose.yml文件只是为了创建

  • 我有问题与我的Xamarin窗体项目与ProGuard,我有以下错误:java.exe"退出与代码1 和多个警告,如:okio。Okio:找不到引用的类java.nio.file.路径 我尝试过许多解决方案,例如: 下载最新版本的ProGuard并将其替换到特定文件夹中。 设置我的Java最大堆大小为1G 创建自己的proguard.cfg并将构建操作设置为ProGuard dConfigurat

  • 当我在PyCharm中手动停止脚本时,进程以退出代码137结束。但是我没有停止剧本。还有出口代码137。有什么问题? Python版本是3.6,在运行xgboost.train()方法时进程完成。