微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – 如何在docker中使用volume来撰写postgres?

这是我正在使用的 image.

我把它命名为posgres_test

如果我单独运行图像

docker run -i -t -v="test_volume:/var/lib/postgresql" -p 5432:5432 posgres_test

我可以访问它

psql -h 192.168.99.100 -p 5432 -U pguser -W pgdb

或者我可以使用我的golang应用程序访问它

// host is set to postgres
db,err := sql.Open("postgres","postgres://pguser:pguser@postgres:5432/pgdb")
// table test_db is manually created.
rows,err := db.Query("SELECT name FROM test_db WHERE)

但是,如果我使用码头组合

泊坞窗,compose.yml

version: "2"
services:
  postgres:
    image: my_image/postgresql:9.3
    volumes:
      - test_volume:/var/lib/postgresql
    ports:
      - "5432:5432"
  web:
    image: my-golang-app4
    ports:
      - "8080:8080"
volumes:
  test_volume: {}

我得到以下内容

pguser@pgdb ERROR:  relation "test_db" does not exist at character 15

我知道test_volume中存在test_db

docker run -i -t -v="test_volume:/var/lib/postgresql" -p 5432:5432 posgres_test
psql -h 192.168.99.100 -p 5432 -U pguser -W pgdb

\dt

显示我创建的表

但似乎我的应用程序在docker组合找不到它

有人可以帮我吗?

关于你的docker-compose文件

>首先我以为这是因为你不使用’links’选项将你的postgres容器链接到web容器 – 这是很好的做法,如果你不扩展端口 – 但是你扩展postgres端口.
>如果你想使用你发布的图像继承
而不是使用这一行:

my_image/postgresql:9.3

使用:

docker/postgres

并创建路径docker / postgres,并将Dockerfile放在您想要的容器中.

>我总是在docker-compose.yml中使用共享卷,如下所示:

:在/ var / www / html等

在哪里是我的项目路径,我放置我的代码文件.

我创建的图像来测试这种情况

我没有你的所有docker文件结构来重现这个错误并修复它,所以我创建了docker-compose,这应该符合您的需要或帮助解决您的问题:

version: '2'
services:
  web:
    build: docker/web
    ports:
      - "8080:8080"
    links:
      - dbpostgres 
    volumes:
      - .:/var/www/html   # I will share my code so I map this path
  dbpostgres:
    image: postgres
    volumes:
      - /private/var/lib/postgresql:/var/lib/postgresql
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: pguser
      POSTGRES_PASSWORD: pguser
      POSTGRES_DB: pgdb

笔记:

>我会推荐使用官方postgres的形象
我留下了留言.

我怎么连接:

host=dbpostgres port=5432 dbname=pgdb user=pguser password=pguser

因为我的Web容器现在知道主机dbpostgres(映像名称和域名) – 我使用链接链接他们.

如果您需要现有容器中的数据库

如果您需要现有容器中的数据库,只需使用docker cp选项即可复制数据库localy:

docker cp posgres_test:/var/lib/postgresql /private/var/lib/postgresql

其中/ private / var / lib / postgresql是本地主机上的路径.
您还需要将dock中的数据库的凭据更改为旧的凭据.
在运行docker-compose之前,必须先执行此操作,因为如果db不存在,那么它将被装箱.

任何问题,让我知道.

原文地址:https://www.jb51.cc/postgresql/192618.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐