Kev*_*vin 28 postgresql docker docker-compose
这是我正在使用的图像.
我把它命名了 posgres_test
如果我单独运行图像
docker run -i -t -v="test_volume:/var/lib/postgresql" -p 5432:5432 posgres_test
Run Code Online (Sandbox Code Playgroud)
我可以访问它
psql -h 192.168.99.100 -p 5432 -U pguser -W pgdb
Run Code Online (Sandbox Code Playgroud)
或者我可以使用我的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)
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用 docker compose
docker-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: {}
Run Code Online (Sandbox Code Playgroud)
我得到以下内容
pguser@pgdb ERROR: relation "test_db" does not exist at character 15
Run Code Online (Sandbox Code Playgroud)
我知道肯定test_db存在的test_volume,因为
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
Run Code Online (Sandbox Code Playgroud)
将显示我创建的表格
但似乎我在docker撰写的应用程序无法找到它
有人可以帮我吗?
Ark*_*sky 17
关于您的docker-compose文件
首先我认为这是因为你不使用'links'选项将你的postgres容器链接到web容器 - 如果你不扩展端口,这是一个很好的做法 - 但你扩展了postgres端口.
如果您想从您发布的图像中使用继承而不是使用此行:
my_image/PostgreSQL的:9.3
使用:
docker/postgres
Run Code Online (Sandbox Code Playgroud)
并创建路径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
Run Code Online (Sandbox Code Playgroud)
笔记:
我会建议使用官方的postgres图像
我在旁边留下了评论.
我是如何建立联系的:
host=dbpostgres port=5432 dbname=pgdb user=pguser password=pguser
Run Code Online (Sandbox Code Playgroud)
因为我的Web容器现在知道主机dbpostgres(图像名称和域名) - 我使用链接链接它们.
如果您需要现有容器中的数据库
如果您需要现有容器中的数据库,只需使用选项docker cp复制数据库localy:
docker cp posgres_test:/var/lib/postgresql /private/var/lib/postgresql
Run Code Online (Sandbox Code Playgroud)
/private/var/lib/postgresql你本地主机的路径在哪里.您还需要在docker-compose中将凭据更改为db到您的旧凭据.您必须在运行docker-compose之前执行此操作,因为如果db不存在,则会被创建.
有任何问题,请告诉我.
如果卷是外部的并且在使用 docker-compose 之前已经存在,您应该将其声明为外部,否则 docker compose 将创建一个以项目名称作为前缀的新卷。
volumes:
test_volume:
external: true
Run Code Online (Sandbox Code Playgroud)
external使用 compose v3 的文档(大部分类似于v2):https : //docs.docker.com/compose/compose-file/compose-file-v3/#external
我想这对你来说应该是这样的。
docker run -itd -p 5432:5432 --name postgres_test -v /path/in/your/host :/path/in/your/container postgres_test psql -h 192.168.99.100 -p 5432 -U pguser -W pgdb
Run Code Online (Sandbox Code Playgroud)
阅读 Docker 文档(https://docs.docker.com/engine/tutorials/dockervolumes/),观看教程(有一个 Docker Youtube 频道,里面有很棒的教程)。
| 归档时间: |
|
| 查看次数: |
30118 次 |
| 最近记录: |