Postgres Docker Container数据无法挂载到本地

时间:2017-08-11 10:09:59

标签: windows postgresql docker docker-compose

我正在尝试在postgres中进行数据持久化。但是当我想将数据文件夹挂载到我的本地文件中时,我收到了这个错误。

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
LOG:  could not link file "pg_xlog/xlogtemp.25" to "pg_xlog/000000010000000000000001": Operation not permitted
FATAL:  could not open file "pg_xlog/000000010000000000000001": No such file or directory
child process exited with exit code 1
initdb: removing contents of data directory "/var/lib/postgresql/data"
running bootstrap script ...

这是我的YAML文件

version: '3.1'

services:

  postgres:
    restart: always
    image: postgres:9.6.4-alpine
    ports:
      - 8100:5432
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: root

我正在Windows上使用docker工具箱。 Virtual Box中的泊坞机。

2 个答案:

答案 0 :(得分:1)

看起来它必须是/ mnt / sda1 / var / lib / docker / volumes / psql / _data for windows docker toolbox。这对我有用

docker run -it --name psql -p 5432:5432 -v psql:/var/lib/postgresql/data postgres:9.5-alpine

"Mounts": [
            {
                "Type": "volume",
                "Name": "psql",
                "Source": "/mnt/sda1/var/lib/docker/volumes/psql/_data",
                "Destination": "/var/lib/postgresql/data",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }

docker volume ls

DRIVER              VOLUME NAME
local               65f253d220ad390337daaacf39e4d17000c36616acfe1707e41e92ab26a6a23a
local               761f7eceaed5525b70d75208a1708437e0ddfa3de3e39a6a3c069b0011688a07
local               8a42268e965e6360b230d16477ae78035478f75dc7cb3e789f99b15a066d6812
local               a37e0cf69201665b14813218c6d0441797b50001b70ee51b77cdd7e5ef373d6a
local               psql

请参阅以获取更多信息:bad mount

答案 1 :(得分:0)

看起来您使用共享数据目录(共享到虚拟机中的主机目录)进行数据库存储。

只有两个选项才有意义:

1)您对目录权限有一个小问题

2)你遇到一个已知的问题(google!)和一些VirtualBox以及某些 Windows版本的VmWare版本,你无法在从主机到虚拟机共享的目录中创建符号链接。

对于(2),解决方法是不使用共享文件夹来保存数据。

无论哪种方式,这都是一个问题,应由docker镜像本身的提供者或虚拟器的提供者(vbox,vmware等)解决。

这不是Windows操作系统或PostgreSQL的错误。