我正在尝试将我的数据保存在/ home / me / redmine中,这样当我的容器停止时,没有数据丢失.我正在使用官方的postgres docker hub图像.
问题是,每次我启动postgres容器时,它会立即退出.当我将’data’附加到/ var / lib / postgresql时,这个问题开始了,否则,在没有添加’data’的情况下,它会启动,但是我的数据没有被保存.此外,我在主机上的路径是/var/lib/postgresql/9.4/data,但图像页面说使用/ var / lib / postgresql / data.
以下是我尝试从主机启动/挂载卷的方法:
docker run --name postgres -d \
--env='DB_NAME=redmine_production' \
--env='DB_USER=redmine' \
--env='DB_PASS=secret' \
--volume=/home/me/redmine/postgresql:/var/lib/postgresql/data \
postgres
……然后我将redmine链接如下…
docker run -d -p 3000:3000 --name redmine \
-v /home/me/redmine/files:/usr/src/redmine/files \
--link postgres:postgres redmine
在redmine容器中,/ home / me / redmine / files卷是一个单独的目录,我试图将文件保留在Postgres数据库中.
编辑:
当我进入我的主机/ var / lib / postgresql目录时,我在其中找到9.4 / data,然后看到我的/ etc / passwd或/ etc / groups中没有列出所有者和组,并想知道这是不是’与问题有关.
/var/lib/postgresql/9.4/data # ls -la
total 88
drwx------ 18 70 70 4096 Aug 13 2015 .
drwxr-xr-x 3 root root 4096 Mar 28 2015 ..
drwx------ 8 70 70 4096 Jul 2 2015 base
drwx------ 2 70 70 4096 Jul 2 2015 global
drwx------ 2 70 70 4096 Mar 28 2015 pg_clog
drwx------ 2 70 70 4096 Mar 28 2015 pg_dynshmem
lrwxrwxrwx 1 root root 31 Mar 28 2015 pg_hba.conf -> /etc/postgresql- 9.4/pg_hba.conf
lrwxrwxrwx 1 root root 33 Mar 28 2015 pg_ident.conf -> /etc/postgresql-9.4/pg_ident.conf
drwx------ 4 70 70 4096 Mar 28 2015 pg_logical
drwx------ 4 70 70 4096 Mar 28 2015 pg_multixact
drwx------ 2 70 70 4096 Jul 2 2015 pg_notify
drwx------ 2 70 70 4096 Mar 28 2015 pg_replslot
drwx------ 2 70 70 4096 Mar 28 2015 pg_serial
drwx------ 2 70 70 4096 Mar 28 2015 pg_snapshots
drwx------ 2 70 70 4096 Aug 13 2015 pg_stat
drwx------ 2 70 70 4096 Aug 13 2015 pg_stat_tmp
drwx------ 2 70 70 4096 Mar 28 2015 pg_subtrans
drwx------ 2 70 70 4096 Mar 28 2015 pg_tblspc
drwx------ 2 70 70 4096 Mar 28 2015 pg_twophase
-rw------- 1 70 70 4 Mar 28 2015 PG_VERSION
drwx------ 3 70 70 4096 Mar 28 2015 pg_xlog
-rw------- 1 70 70 88 Mar 28 2015 postgresql.auto.conf
lrwxrwxrwx 1 root root 35 Mar 28 2015 postgresql.conf -> /etc/postgresql-9.4/postgresql.conf
-rw------- 1 70 70 1626 Aug 13 2015 postmaster.log
-rw------- 1 70 70 114 Jul 2 2015 postmaster.opts
思考?
除此之外,你似乎大多走在正确的轨道上.这是一个完整的例子:
首先,我启动一个Postgres容器.我正在我的主目录之外的某处找到持久性存储,因为您已经注意到文件不会归您所有,这可能会在您的主目录中造成混淆(尽管不一定有问题):
docker run --rm --name postgres \
-v /tmp/postgres:/var/lib/postgresql/data \
-e POSTGRES_DB=larstest \
-e POSTGRES_USER=lars \
-e POSTGRES_PASSWORD=secret postgres
由于这是我第一次开始指向该数据目录的postgres,我们将看到它初始化数据库:
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
Success. You can now start the database server using:
现在,从另一个窗口,我可以连接到它…
$psql -h 172.17.0.4 -U lars larstest
Password for user lars:
psql (9.5.4,server 9.6.0)
WARNING: psql major version 9.5,server major version 9.6.
Some psql features might not work.
Type "help" for help.
…并创建一些数据:
larstest=# create table testtable (id integer);
CREATE TABLE
larstest=# insert into testtable values (1);
INSERT 0 1
larstest=# select * from testtable;
id
----
1
(1 row)
现在,我退出容器:
^CLOG: received fast shutdown request
LOG: aborting any active transactions
FATAL: terminating connection due to administrator command
LOG: autovacuum launcher shutting down
LOG: shutting down
LOG: database system is shut down
我们可以验证它已不再运行:
$docker ps | grep postgres
但是如果我们用相同的命令行参数再次启动它;
docker run --rm --name postgres \
-v /tmp/postgres:/var/lib/postgresql/data \
-e POSTGRES_DB=larstest \
-e POSTGRES_USER=lars \
-e POSTGRES_PASSWORD=secret postgres
我们看到它没有初始化数据库,因为它已经存在,并直接跳到:
LOG: database system was shut down at 2016-10-21 03:13:50 UTC
LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
此时,我们可以重新连接到数据库并发现我们的数据仍然存在:
$psql -h 172.17.0.2 -U lars larstest
Password for user lars:
psql (9.5.4,server major version 9.6.
Some psql features might not work.
Type "help" for help.
larstest=# select * from testtable;
id
----
1
(1 row)
这就是它的全部内容.