Docker Postgres不在docker-entrypoint-initdb.d中运行初始化文件

Shu*_*pli 5 postgresql docker docker-compose

基于Docker的Postgres 文档,我可以在其中创建任何*.sql文件/docker-entrypoint-initdb.d并使其自动运行。

我有init.sql包含CREATE DATABASE ronda;

在我的docker-compose.yaml,我有

web:
  restart: always
  build: ./web
  expose:
    - "8000"
  links:
    - postgres:postgres
  volumes:
    - /usr/src/app/static
  env_file: .env
  command: /usr/local/bin/gunicorn ronda.wsgi:application -w 2 -b :8000

nginx:
  restart: always
  build: ./nginx/
  ports:
    - "80:80"
  volumes:
    - /www/static
  volumes_from:
    - web
  links:
    - web:web

postgres:
  restart: always
  build: ./postgres/
  volumes_from:
    - data
  ports:
    - "5432:5432"

data:
  restart: always
  build: ./postgres/
  volumes:
    - /var/lib/postgresql
  command: "true"
Run Code Online (Sandbox Code Playgroud)

还有我的postgres Dockerfile,

FROM library/postgres

RUN mkdir -p /docker-entrypoint-initdb.d
COPY init.sql /docker-entrypoint-initdb.d/
Run Code Online (Sandbox Code Playgroud)

运行docker-compose builddocker-compose up做工精细,但数据库ronda未创建。

Tho*_*eil 3

如果您的初始化要求只是创建ronda架构,那么您可以使用文档POSTGRES_DB中描述的环境变量。

postgres 服务的docker-compose.yml文件部分将是:

postgres:
  restart: always
  build: ./postgres/
  volumes_from:
    - data
  ports:
    - "5432:5432"
  environment:
    POSTGRES_DB: ronda
Run Code Online (Sandbox Code Playgroud)

顺便说一句,不要用于restart: always您的data容器,因为该容器不运行任何服务(仅运行true命令)。true这样做基本上就是告诉 Docker在无限循环中运行该命令。