だから、私はこの構造を持つ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
だから私は問題を見つけました。
ご協力いただきありがとうございます。
あなたの問題は、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>
に書き込まれます。