在Dockerfile中创build的数据库不会出现在正在运行的容器中

我已经创build了一个基于https://index.docker.io/u/nornagon/postgres/图像的Dockerfile。 我想创build一个Postgres数据库泊坞窗图像作为我的CI过程的一部分。

这是我的Dockerfile:

FROM nornagon/postgres ADD sql sql ADD create_db.sh /src/ USER postgres RUN /src/create_db.sh CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"] 

这里是RUN命令执行的create_db.sh bash脚本:

 #! /bin/bash /etc/init.d/postgresql start psql --command "CREATE USER queuespy WITH SUPERUSER PASSWORD 'queuespy';" createdb -O queuespy queuespy psql -l for i in /sql/tables/*.sql do psql --file=$i --dbname=queuespy done for i in /sql/static_data/*.sql do psql --file=$i --dbname=queuespy done /etc/init.d/postgresql stop 

当我构buildDockerfile时,它似乎一切正常。 我得到这个输出显示psql命令全部成功执行:

 $ docker build -t queuespy/db . Uploading context 45.57 kB Uploading context Step 0 : FROM nornagon/postgres ---> b60632eb52bf Step 1 : MAINTAINER mike@suteki.co.uk ---> Using cache ---> 75fd9054927f Step 2 : ADD sql sql ---> Using cache ---> 3c1bfe677e42 Step 3 : ADD create_db.sh /src/ ---> bef6f8729c2a Step 4 : USER postgres ---> Running in 4280e300d7f3 ---> ce7a940abcd7 Step 5 : RUN /src/create_db.sh ---> Running in 196ead143566 uid=102(postgres) gid=105(postgres) groups=105(postgres),104(ssl-cert) * Starting PostgreSQL 9.3 database server ...done. CREATE ROLE List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- docker | docker | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | queuespy | queuespy | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (5 rows) CREATE TABLE INSERT 0 1 INSERT 0 1 INSERT 0 1 * Stopping PostgreSQL 9.3 database server ...done. ---> 882102c8256c Successfully built 882102c8256c 

我可以运行图像确定:

 $ docker run -d -p 5432:5432 --name queuespy_db queuespy/db 

但是当我列出数据库和用户时,没有我在Dockerfile中创build的那些符号,只有在nornagon / postgres映像中创build的docker用户?

问题是数据目录的默认位置在基本映像中configuration为VOLUME 。 在您发布您的问题后,维护者似乎很快就改变了这一点。 就图像提交而言,对VOLUME目录中文件系统的更改被Docker忽略。

我遇到了这个问题与堆栈式Postgres图像。 为了能够创build一个包含postgres +自定义模式的新映像,需要一个新的非VOLUME数据目录。 Postgres也需要configuration使用这个目录。 在stackbrew的版本中,这与在自定义Dockerfile中覆盖PGDATA环境variables一样简单:

 FROM postgres # Original 'PGDATA' is /var/lib/postgresql/data RUN mkdir -p /var/lib/pgdata ENV PGDATA /var/lib/pgdata # RUN ... logic to create schema