Как остановить контейнер базы данных docker - PullRequest
0 голосов
/ 03 февраля 2020

Попытка запустить следующий docker файл создания

version: '3'

services:
  database:
    image: postgres
    container_name: pg_container
    environment:
      POSTGRES_USER: partman
      POSTGRES_PASSWORD: partman
      POSTGRES_DB: partman


  app:
    build: .
    container_name: partman_container
    links:
     - database
    environment:
     - DB_NAME=partman
     - DB_USER=partman
     - DB_PASSWORD=partman
     - DB_HOST=database
     - DB_PORT=5432
     - SECRET_KEY='=321t+92_)@%_4b+f-&0ym(fs2p5-0-_nz5mhb_cak9zlo!bv@'
    depends_on:
      - database

    expose:
      - "8000"
      - "8020"

    ports:
       - "127.0.0.1:8020:8020"

volumes:
  pgdata: {}

при запуске docker -создать сборку со следующим docker файлом

# Dockerfile

# FROM directive instructing base image to build upon
FROM python:3.7-buster


RUN apt-get update && apt-get install nginx vim -y --no-install-recommends
COPY nginx.default /etc/nginx/sites-available/default
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log


RUN mkdir .pip_cache \
 mkdir -p /opt/app \
 mkdir -p /opt/app/pip_cache \
 mkdir -p /opt/app/py-partman

COPY start-server.sh /opt/app/
COPY requirements.txt start-server.sh /opt/app/
COPY .pip_cache /opt/app/pip_cache/
COPY partman /opt/app/py-partman/

WORKDIR /opt/app
RUN pip install -r requirements.txt --cache-dir /opt/app/pip_cache
RUN chown -R www-data:www-data /opt/app 
RUN /bin/bash -c 'ls -la; chmod +x /opt/app/start-server.sh; ls -la'

EXPOSE 8020
STOPSIGNAL SIGTERM

CMD ["/opt/app/start-server.sh"]

/ opt /app/start-server.sh:

#!/usr/bin/env bash
# start-server.sh
ls
pwd

cd py-partman
ls
pwd
python manage.py createsuperuser --no-input
python manage.py makemigrations
python manage.py migrate
python manage.py initialize_entities

образ базы данных продолжает работать, я хочу остановить его, потому что в противном случае задание jenkins будет продолжать ждать завершения изображения.

Какие-нибудь хорошие идеи / лучшие идеи, как это сделать?

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Docker Compose обычно ориентирован на долго выполняющиеся процессы серверного типа, и там, где контейнеры базы данных могут часто запускаться через 30-60 секунд, обычно выгодно не повторять их. (На самом деле артефакты, которые вы показываете, выглядят немного странно, если не включить команду python manage.py runserver.)

Похоже, есть опция docker -составить для того, что вы ищите

docker-compose up --build --abort-on-container-exit

Если вы хотите сделать это более вручную, и особенно, если обычное поведение вашего контейнера app состоит в том, чтобы фактически запустить сервер, вы можете docker -компонентный запуск команда инициализации. Это запустит контейнер и его зависимости, но также ожидает, что его команда вернется, и тогда вы сможете очистить себя.

docker-compose build
docker-compose run app /opt/app/initialize-only.sh
docker-compose down -v
1 голос
/ 03 февраля 2020

Может быть с -> docker stop <"идентификатор контейнера или имя контейнера">

Используйте -f, чтобы принудительно вызвать его, если его невозможно остановить. Попробуйте.

...