我当前的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}
depends_on
在 python-app 服务之前启动,但docker-compose并未按指定顺序运行服务。docker-compose up --build --remove-orphans
命令。
最佳答案
请注意,depends_on
仅等待另一个容器启动,而不等待它正在运行的进程启动。在您的情况下,可能会发生的事情是,您在尝试启动postgres
进程的指定端口时仍在尝试连接它。
有两种方法可以解决这种情况-
restart
容器指定某种python-app
子句-您可能会看到python-app
容器处于失败状态,因此已发布了此问题。您的restart: on-failure:10
服务的docker-compose.yml中的python-app
将最多重启您的容器10次,以防其无法连接到postgres
容器。这将确保您在postgres
容器启动并运行之前给了它足够的时间……就是这个过程。 depends_on
所需的行为。 https://stackoverflow.com/questions/52699899/