Создайте контейнер с кодом 0 и зарегистрируйте его с пустым - PullRequest
0 голосов
/ 21 сентября 2019

Мне нужно контейнировать веб-проект Django с помощью Docker.Я разделил проект на панель инструментов, api-сервер и базу данных.Когда я набираю docker-compose up, он печатает api-server exited with code 0 и контейнер Api-сервера Exited (0), а я печатаю docker logs api-server, он возвращает пустой, но другой контейнер нормальный.Я не знаю, как проверить проблему.

Структура каталога 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"

НекоторыеСодержимое Dockerfile api-сервера выглядит следующим образом:

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"]

start.sh выглядит следующим образом

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

type docker-compose up результат выглядит следующим образом

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 logs api-server пусто

Буду очень признателен, если вы, ребята, подскажете, как проверить эту проблему. Лучше предоставить решение.

1 Ответ

1 голос
/ 21 сентября 2019

Вы уже копируете api-server в Dockerfile во время сборки, которая должна работать нормально, но в Docker compose все это переопределяет все пакеты pip и код.

    volumes:
      - /api-server:/webapps

Удалите том из вашего Docker composeи это должно работать.

Во-вторых, установите права доступа к скрипту bash.

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

В-третьих, вам нужно запустить python, используя bash, поскольку в bash нет ничего, что CMDне может выполнить, так почему не как CMD?

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...