depen_on не ждет другого сервиса в docker-compose 1.22.0 - PullRequest
0 голосов
/ 08 октября 2018

Мой текущий docker-compose.yml -

# This docker-compose file uses '.env' file present in the current directory, 
# for database credentials. If you want to change the credentials please 
# change the data in '.env'.
# '.env' file might be hidden as dot files are hidden please unhide to see it.
# Know more about '.env' file: https://docs.docker.com/compose/env-file/

version: '3'

services: 
  postgresdb:
    image: postgres:9.5
    environment: 
      POSTGRES_USER: ${ENV_POSTGRES_USER}
      POSTGRES_PASSWORD: ${ENV_POSTGRES_PASSWORD}
      POSTGRES_DB: ${ENV_POSTGRES_DB}
    volumes: 
      - "../app/volumes/postgres/data:/var/lib/postgresql/data"

  # This is python service. It uses python 3.6 as base image.
  # It will build this service using the Dockerfile present in current directory
  # To modify the values of environment variables please open '.env' file.
  # This service will not run until postgresdb service gets started
  python-app:
    image: python:3.6
    build: .    # Builds using Dockerfile from current directory
    depends_on: 
      - postgresdb
    ports: 
      - "5001:5001"
    tty: true
    volumes: 
      - "../app/volumes/trained_knn_model.clf:/usr/src/app/my-app/trained_knn_model.clf"
      - "../app/volumes/XYPickle.pickle:/usr/src/app/my-app/XYPickle.pickle"
    environment: 
      - POSTGRES_USER=${ENV_POSTGRES_USER}
      - POSTGRES_PASSWORD=${ENV_POSTGRES_PASSWORD}
      - POSTGRES_HOST=${ENV_POSTGRES_HOST}
      - POSTGRES_PORT=${ENV_POSTGRES_PORT}
      - POSTGRES_DB=${ENV_POSTGRES_DB}

Мой файл docker-compose.yml содержит 2 службы.Я указал службу postgrasdb для запуска до службы python-app с использованием depends_on, но docker-compose не запускает службы в указанном порядке.Как я могу получить службу postgrasdb для запуска до службы python-app ?Я выполняю команду docker-compose up --build --remove-orphans.

1 Ответ

0 голосов
/ 08 октября 2018

Обратите внимание, что depends_on ожидает только запуска другого контейнера, но не процесса, который он запускает.Вероятно, в вашем случае может произойти то, что вы пытаетесь подключиться к процессу postgres на указанном порту, пока он еще только начинается.

Существует два способа решения такого сценария:

  1. Укажите какое-то условие restart для вашего контейнера python-app - вы, вероятно, видите свой контейнер python-app в состоянии сбоя, поэтому вы задали этот вопрос.restart: on-failure:10 в docker-compose.yml для вашей службы python-app перезапустит ваш контейнер до 10 раз, если ему не удастся подключиться к контейнеру postgres.Это гарантирует, что вы дадите ему достаточно времени, прежде чем контейнер postgres будет запущен и запущен ... этот процесс.

  2. Используйте внешний инструмент, такой как dockerize., что позволяет ждать в других службах перед запуском контейнера.По сути, это дает вам желаемое поведение с depends_on.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...