我正在尝试在docker容器中运行postgresql,但当然我需要让我的数据库数据是持久的,所以我试图使用仅数据容器暴露卷来存储数据库在这个地方.
所以,我的数据容器有这样的Dockerfile:
FROM ubuntu
# Create data directory
RUN mkdir -p /data/postgresql
# Create /data volume
VOLUME /data/postgresql
Run Code Online (Sandbox Code Playgroud)
我运行的是:
docker run --name postgresql_data lyapun/postgresql_data true
Run Code Online (Sandbox Code Playgroud)
在我的postgresql.conf中我设置:
data_directory = '/data/postgresql'
Run Code Online (Sandbox Code Playgroud)
然后我以这样的方式运行我的postgresql容器:
docker run -d --name postgre --volumes-from postgresql_data lyapun/postgresql
Run Code Online (Sandbox Code Playgroud)
我得到了:
2014-07-04 07:45:57 GMT FATAL: data directory "/data/postgresql" has wrong ownership
2014-07-04 07:45:57 GMT HINT: The server must be started by the user that owns the data directory.
Run Code Online (Sandbox Code Playgroud)
如何处理这个问题?我搜索了很多关于使用带有docker卷的postgresql的信息,但我没有找到任何东西.
谢谢!
好的,似乎我找到了解决此问题的方法。
而不是以这种方式运行 postgres:
CMD ["/usr/lib/postgresql/9.1/bin/postgres", "-D", "/var/lib/postgresql/9.1/main", "-c", "config_file=/etc/postgresql/9.1/main/postgresql.conf"]
Run Code Online (Sandbox Code Playgroud)
我写了 bash 脚本:
chown -Rf postgres:postgres /data/postgresql
chmod -R 700 /data/postgresql
sudo -u postgres /usr/lib/postgresql/9.1/bin/postgres -D /var/lib/postgresql/9.1/main -c config_file=/etc/postgresql/9.1/main/postgresql.conf
Run Code Online (Sandbox Code Playgroud)
并将 postgresql 映像中的 CMD 替换为:
CMD ["bash", "/run.sh"]
Run Code Online (Sandbox Code Playgroud)
有用!
| 归档时间: |
|
| 查看次数: |
11411 次 |
| 最近记录: |