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,并find了我find的任何不同的/dockes-entrypoint-initdb.d解决scheme(卷,ADD,COPY等)。 我试图运行和sh脚本,什么也没有。

你能看到这个docker-compose和Dockerfile并帮助我吗? 谢谢

Dockerfile:

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

泊坞窗,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 

所以我发现了这个问题。 首先:我的SQL脚本试图重新创buildpostgres用户。 然后,dockedev_db退出。 第二:我需要删除所有与数据库相关的图片到docker-compose再次运行脚本。

谢谢你的帮助。

您的问题是由您在Dockerfile中使用ADD的方式引起的:

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

这将创build一个名为/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>