2016-11-02 8 views
7

Also, ich habe ein Docker-compose Projekt mit dieser Struktur:Docker PostgreSQL - Scripts in /docker-entrypoint-initdb.d läuft nicht

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

PHP, Redis, Elasticsearch OK ist. Aber Postgresql führt dev_data_setup.sql nicht mit anderen Lösungen für /dockes-entrypoint-initdb.d aus, die ich gefunden habe (Volume, ADD, COPY, etc). Ich habe versucht zu rennen und sh-Script und nichts.

Konnten Sie dieses docker-compose und Dockerfile sehen und mir helfen? Dank

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 
+0

Sieht gut aus für mich. Wenn Sie in den Postgres-Container wechseln, sehen Sie Ihre Datei in '/ docker-entrepoint-initdb.d /'. Versuchen Sie Folgendes: 'docker-compose exec db ls -al/docker-eingangspunkt-initdb.d /'. Auch die Veröffentlichung der Protokolle kann helfen: 'docker-compose logs db' – BMitch

+0

Nun, TIL über'/docker-entrypoint-initdb.d/'im postgres-Container, also danke dafür! :) – larsks

+0

Die Datei ist da.Dies ist das Protokoll von db: –

Antwort

1

So habe ich das Problem gefunden. Erstens: mein SQL-Skript versuchte Postgres-Benutzer neu zu erstellen. Dann wurde die dockedev_db beendet. Zweitens: Ich musste alle Bilder im Zusammenhang mit db zu docker-compose entfernen das Skript erneut ausführen.

Danke für Ihre Hilfe.

0

Ihr Problem durch die Art und Weise verursacht wird, Sie ADD in Ihrem Dockerfile verwenden:

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

Dies schafft eine Datei namens /docker-entrypoint-initdb.d mit dem Inhalt der Datei dev_data_setup.sql. Was Sie wollen, ist /docker-entrypoint-initdb.d als ein Verzeichnis zu behandeln.

Sie sollten Ihren ADD Befehl an eine der folgenden Optionen ändern:

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

Der Schrägstrich die dest Parameter als Verzeichnis behandeln. Oder verwenden Sie

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

, die speziell den Dateinamen buchstabieren.

Referenz: https://docs.docker.com/engine/reference/builder/#/add

Wenn <dest> nicht mit einem Schrägstrich endet, wird es eine reguläre Datei und die Inhalte der <src> berücksichtigt werden bei <dest> geschrieben werden.

+0

Danke Mann, aber ich habe das auch versucht. Es funktioniert nicht. Das Skript wird kopiert, aber der Container führt das Skript beim Starten der Datenbank nicht aus. Wie ich schon sagte, habe ich viele Male mit vielen verschiedenen Konfigurationen versucht, einschließlich eines Mount-Volumes. Und nichts. Für eine Weile benutze ich ein Ubuntu-Image mit Postgresql-Installation, und es funktioniert. –

+0

Sieht so aus, als ob Sie auf dieses Problem stoßen: https://github.com/docker-library/postgres/issues/193 – nwinkler

+0

Dummer Vorschlag: 'chmod 755 dev_data_setup.sql' vor dem Build. Docker führt keine Dinge aus, die nicht ausführbar sind. –