相关疑难解决方法(0)

如何使用卷在dockerized postgres数据库中保存数据

我的docker compose文件有三个容器,web,nginx和postgres.Postgres看起来像这样:

postgres:
  container_name: postgres
  restart: always
  image: postgres:latest
  volumes:
    - ./database:/var/lib/postgresql
  ports:
    - "5432:5432
Run Code Online (Sandbox Code Playgroud)

我的目标是安装一个./database与postgres容器内调用的本地文件夹相对应的卷/var/lib/postgres.当我启动这些容器并将数据插入postgres时,我验证/var/lib/postgres/data/base/了我正在添加的数据(在postgres容器中),但是在我的本地系统中,./database只获取了一个data文件夹,即./database/data创建了它,但它是空的.为什么?

笔记:

更新1

根据尼克的建议,我做了一个docker inspect并发现:

    "Mounts": [
        {
            "Source": "/Users/alex/Documents/MyApp/database",
            "Destination": "/var/lib/postgresql",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Name": "e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35",
            "Source": "/var/lib/docker/volumes/e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35/_data",
            "Destination": "/var/lib/postgresql/data",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        }
    ],
Run Code Online (Sandbox Code Playgroud)

这似乎是数据被另一个我自己编码的卷偷走了.不知道为什么会这样.postgres图像是否为我创建了该卷?如果是这样,当我重新启动时,是否有某种方法可以使用该卷而不是我正在安装的卷?否则,是否有一种很好的方法可以禁用其他卷并使用我自己的卷./database

更新2

我找到了解决方案,感谢尼克!(和另一位朋友)以下答案.

postgresql docker docker-compose docker-volume

166
推荐指数
4
解决办法
11万
查看次数

Docker等待postgresql运行

我在我的项目中使用带有django的postgresql.我把它们放在不同的容器中,问题是我需要在运行django之前等待postgres.这时我正在使用sleep 5django容器的command.sh文件.我还发现netcat可以做到这一点,但我更喜欢没有额外包的方式.curl和wget不能这样做,因为他们不支持postgres协议.有办法吗?

postgresql docker

17
推荐指数
13
解决办法
2万
查看次数

Docker 不持久化 postgres 卷 [django]

这里有很多关于我经历过的类似问题的问题,比如这个这个这个这个非常相似,但那里的解决方案都没有解决我的问题。请不要关闭这个问题。

问题:

我在 docker 上使用 nginx 和 postgres 运行 django。机密信息存储在 .env 文件中。我的 postgres 数据没有持久化docker-compose up/startdocker-compose down/stop/restart

这是我的docker-compose文件:

version: '3.7'

services:
  web:
    build: ./app
    command: gunicorn umngane_project.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - ./app/:/usr/src/app/
    expose:
      - 8000
    environment:
      - SECRET_KEY=${SECRET}
      - SQL_ENGINE=django.db.backends.postgresql
      - SQL_DATABASE=postgres
      - SQL_USER=${POSTGRESQLUSER}
      - SQL_PASSWORD=${POSTGRESQLPASSWORD}
      - SQL_HOST=db
      - SQL_PORT=5432
      - SU_NAME=${SU_NAME}
      - SU_EMAIL=${SU_EMAIL}
      - SU_PASSWORD=${SU_PASSWORD}
    depends_on:
      - db
  db:
    image: postgres:11.2-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
  nginx:
    build: …
Run Code Online (Sandbox Code Playgroud)

django postgresql docker docker-compose docker-volume

3
推荐指数
1
解决办法
1096
查看次数