簡體   English   中英

Docker postgres 不在 docker-entrypoint-initdb.d 中運行 init 文件

[英]Docker postgres does not run init file in docker-entrypoint-initdb.d

根據 Docker 的 Postgres文檔,我可以在/docker-entrypoint-initdb.d中創建任何*.sql文件並讓它自動運行。

我有包含CREATE DATABASE ronda; init.sql

在我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"

和我的 postgres Dockerfile,

FROM library/postgres

RUN mkdir -p /docker-entrypoint-initdb.d
COPY init.sql /docker-entrypoint-initdb.d/

運行docker-compose builddocker-compose up工作正常,但未創建數據庫ronda

如果您的初始化要求只是創建ronda模式,那么您可以按照文檔中所述使用POSTGRES_DB環境變量。

postgres 服務的 docker-compose.yml文件的一部分將是:

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

附帶一提,不要對你的data容器使用restart: always因為這個容器不運行任何服務(只是true的命令)。 這樣做基本上是告訴 Docker 在無限循環中運行true命令。

這就是我在我的項目中使用postgres並預加載數據庫的方式。

文件: docker-compose.yml

  db:
    container_name: db_service
    build:
      context: .
      dockerfile: ./Dockerfile.postgres
    ports:
      - "5432:5432"
    volumes:
      - /var/lib/postgresql/data/

如果項目的根文件夾中存在名為pg_dump.backup (二進制轉儲)或psql_dump.sql (純文本轉儲)的文件,則此Dockerfile加載該文件。

文件: Dockerfile.postgres

FROM postgres:9.6-alpine

ENV POSTGRES_DB DatabaseName

COPY pg_dump.backup .
COPY pg_dump.sql .

RUN [[ -e "pg_dump.backup" ]] && pg_restore pg_dump.backup > pg_dump.sql

# Preload database on init
RUN [[ -e "pg_dump.sql" ]] && cp pg_dump.sql /docker-entrypoint-initdb.d/

如果需要重試轉儲的加載,您可以使用以下命令刪除當前數據庫:

docker-compose rm db

然后你可以運行docker-compose up來重試加載數據庫。

與 postgres 11 有同樣的問題。

對我有幫助的一些要點:

  • 跑步:
    • docker-compose rm
    • docker-compose build
    • docker-compose up
  • 顯而易見:不要在分離模式下運行 compose。 您想查看日志。

在將步驟docker-compose rm添加到混合后,它終於起作用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM