繁体   English   中英

用于 postgres 数据的 docker 中的卷挂载

[英]Volume mount in docker for postgres data

我正在尝试使用 docker 将数据插入到 postgres 中。

我的代码中有一个名为 data 的文件夹,其中包含insert命令和一个名为init.sql的文件。
我想将文件夹数据中存在的 init.sql 中的数据插入init.sql中存在的表中。

version: '3.1'

services:
  postgres:  
    image: postgres:11.6-alpine 
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PORT: 5432
    volumes:
      - ./tables:/docker-entrypoint-initdb.d/
      - ./data:/var/lib/postgresql/data
volumes:
  data: {}

我正在尝试这个,但我得到了错误:

initdb:目录“/var/lib/postgresql/data”存在但不为空

我想我没有使用正确的用例,我是 docker 组合的新手。
但是有什么办法可以让我的用例得到满足吗?

这是由于命名卷volumes语法使用不当造成的。
为了挂载一个命名卷,你必须像这样使用它的名字:

    volumes:
      - data:/var/lib/postgresql/data

如果您的语法以. 那么它将是来自您的主机的绑定挂载

    volumes:
      - ./data:/var/lib/postgresql/data

上面的代码是相对于您的docker-compose.yml所在位置安装主机文件夹data

这个docker-compose.yml应该符合您的预期。

version: '3.1'

services:
  postgres:  
    image: postgres:11.6-alpine 
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PORT: 5432
    volumes:
      - ./tables:/docker-entrypoint-initdb.d/
      - data:/var/lib/postgresql/data
volumes:
  data:

如果由于某种原因已经创建了您的卷,并且数据库为空或没有数据库,那么您的第一步应该运行:

docker-compose down --volumes

从文档中:

-v, --volumes           Remove named volumes declared in the `volumes`
                        section of the Compose file and anonymous volumes
                        attached to containers.

来自: https://docs.docker.com/compose/reference/down/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM