2016-08-02 23 views
7

Docker konusunda yeniyim. PostgreSQL görüntüsünü genişlettim ve görüntüyü çalıştırırken yeni DB örneği oluşturabildim. Bu DB dosyasında .sql dosyasını çalıştıracak olan kabuk betiğinden tablolar oluşturmam gerekiyor. PostgreSQL görüntüsünü çalıştırırken sunucu başlatılmıyor mu diyor? PostgreSQL sunucusu, docker kabında başladıktan sonra nasıl betiği çalıştırabiliriz?PostgreSQL docker görüntüsünde tablo oluşturma

Dockerfile:

FROM postgres:9.3 
ENV POSTGRES_USER docker 
ENV POSTGRES_PASSWORD docker 
ENV POSTGRES_DB docker 
RUN apt-get update && apt-get install -y postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3 
ADD initialize.sh /home/MM0312/docker-entrypoint-initdb.d/initialize.sh 
CMD ["/home/MM0312/docker-entrypoint-initdb.d/initialize.sh"] 

initialize.sh official docker image of postgres ait docker-entrypoint.sh komut olarak

#!/bin/bash 
set -e 
set -x 

echo "******PostgreSQL initialisation******" 
gosu docker psql -h localhost -p 5432 -U docker -d $docker -a -f createDatabase.sql 

createDatabase.sql dosyası

REATE TABLE web_origins (
    client_id character varying(36) NOT NULL, 
    value character varying(255) 
); 

cevap

12

yazılır:

psql+=(--username "$POSTGRES_USER" --dbname "$POSTGRES_DB") 

     echo 
     for f in /docker-entrypoint-initdb.d/*; do 
      case "$f" in 
       *.sh)  echo "$0: running $f"; . "$f" ;; 
       *.sql) echo "$0: running $f"; "${psql[@]}" < "$f"; echo ;; 
       *.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${psql[@]}"; echo ;; 
       *)  echo "$0: ignoring $f" ;; 
      esac 
      echo 
done 

Bu nedenle, docker resminizin içinde çalıştırmak istediğiniz her .sql dosyası sadece bu klasörün içine yerleştirilebilir. Yani benim dockerfile

FROM postgres:9.3 
ENV POSTGRES_USER docker 
ENV POSTGRES_PASSWORD docker 
ENV POSTGRES_DB docker 
ADD CreateDB.sql /docker-entrypoint-initdb.d/ 

benziyor Ve CreateDB.sql içeriği:

docker run -d my-postgres 

kontrol etmek için::

docker exec -it 6250aee43d12 bash 
[email protected]:/# psql -h localhost -p 5432 -U docker -d docker 
psql (9.3.13) 
Type "help" for help. 

docker=# \c 
You are now connected to database "docker" as user "docker". 
docker=# \dt 
      List of relations 
Schema | Name  | Type | Owner 
--------+-------------+-------+-------- 
public | web_origins | table | docker 
(1 row) 

CREATE TABLE web_origins (
    client_id character varying(36) NOT NULL, 
    value character varying(255) 
); 

Yani sadece benim konteyner başlamak

+0

teşekkürler, işe yaradı. –

+0

Bu docker oluşturmada nasıl kullanılır? – kamal

+0

Durumumda görebildiğim gibi, db.sql docker-entrypoint-initdb.d dizininde kopyalandı, ancak sql komutları çalışmadı. – kamal