web-dev-qa-db-ja.com

Docker PostgreSQL-/docker-entrypoint-initdb.d内のスクリプトが実行されない

だから、私はこの構造を持つdocker-composeプロジェクトを持っています:

DockerDev
- docker-compose.yaml
- d-php
  - Dockerfile
  - scripts-Apache
- d-postgresql
  - Dockerfile
  - scripts
    - dev_data_setup.sql
- logs
- pgdata
- www

PHP、Redis、ElasticSearchは問題ありません。しかし、Postgresqlはdev_data_setup.sqlを実行せず、/ dockes-entrypoint-initdb.dに対するさまざまな解決策(ボリューム、ADD、COPYなど)を見つけました。私はスクリプトを実行して何もしないようにしようとしました。

このdocker-composeとDockerfileを見て、私を助けてくれませんか?ありがとう

Dockerfile:

FROM postgres:latest
ADD ./scripts/dev_data_setup.sql /docker-entrypoint-initdb.d

docker-compose.yaml:

version: '2'
services:
  php:
    build: ./d-php/
    hostname: www.domain.com
    ports:
      - "80:80"
    volumes:
      - ./www:/var/www/html
      - ./d-php/scripts-Apache2/Apache2.conf:/etc/Apache2/Apache2.conf
      - ./d-php/scripts-Apache2/web.conf:/etc/Apache2/sites-enabled/web.conf
      - ./d-php/scripts-Apache2/webservice.conf:/etc/Apache2/sites-enabled/webservice.conf
      - ./logs:/var/log/Apache2
    links:
      - db
      - redis
      - elasticsearch
  db:
    build: ./d-postgresql/
    volumes:
      - ./pgdata:/pgdata
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - PGDATA=/pgdata
  redis:
    image: redis:latest
  elasticsearch:
    image: elasticsearch:2.4.1
12
Rodrigo Saraiva

だから私は問題を見つけました。

  • まず、私のSQLスクリプトがpostgresユーザーを再作成しようとしていました。次に、dockedev_dbが終了しました。
  • 2つ目:docker-composeでスクリプトを再度実行するには、dbに関連するすべてのイメージを削除する必要がありました。

ご協力いただきありがとうございます。

7
Rodrigo Saraiva

あなたの問題は、DockerfileでADDを使用する方法が原因です。

FROM postgres:latest
ADD ./scripts/dev_data_setup.sql /docker-entrypoint-initdb.d

これにより、/docker-entrypoint-initdb.dファイルの内容を含むdev_data_setup.sqlというファイルが作成されます。あなたが望むのは、/docker-entrypoint-initdb.dをディレクトリとして扱うことです。

ADDコマンドを次のいずれかに変更する必要があります。

ADD ./scripts/dev_data_setup.sql /docker-entrypoint-initdb.d/

末尾のスラッシュはdestパラメータをディレクトリとして扱います。または使用

ADD ./scripts/dev_data_setup.sql /docker-entrypoint-initdb.d/dev_data_setup.sql

具体的にはファイル名を綴ります。

リファレンス: https://docs.docker.com/engine/reference/builder/#/add

<dest>が末尾のスラッシュで終わっていない場合、それは通常のファイルと見なされ、<src>の内容は<dest>に書き込まれます。

4
nwinkler