Docker PostgreSQL - /docker-entrypoint-initdb.d中的脚本无法运行

时间:2016-11-02 17:32:24

标签: postgresql docker docker-compose

所以,我有一个具有这种结构的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的任何不同解决方案(volume,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

2 个答案:

答案 0 :(得分:6)

所以我发现了问题。

  • 首先:我的sql脚本试图重新创建postgres用户。然后,dockedev_db退出。
  • 第二:我需要删除与db相关的所有图像到docker-compose再次运行脚本。

感谢您的帮助。

答案 1 :(得分:4)

您的问题是由您在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>