【问题标题】:Volume mount in docker for postgres data在 docker 中安装卷以获取 postgres 数据
【发布时间】:2020-06-02 15:59:55
【问题描述】:

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

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

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 compose 的新手。
但是有什么办法可以让我的用例得到满足?

【问题讨论】:

  • Mhm... 再看看这个,好吧,你想要达到的目标不能用docker-entrypoint-initdb.d 执行。这种行为(在启动时运行 sql 脚本)在容器第一次启动时才会发生
  • 如果你想这样做,那么你必须覆盖 compose 文件中的 entrypoint 来实现。
  • 好的,谢谢 可能需要做:在卷中:/data:/docker-entrypoint-initdb.d/

标签: postgresql docker docker-compose dockerfile


【解决方案1】:

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

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

如果您的语法以 . 开头,那么它将是来自您的主机的 bind mount

    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/

【讨论】:

  • 谢谢,但它不会将文件 init.sql 中存在的数据插入到 postgres 的文件夹数据中。
  • 它也应该与绑定挂载一起使用,而不仅仅是命名卷
猜你喜欢
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
相关资源
最近更新 更多