如何在Docker中使用音量组成postgres?
这是我正在使用的图像 。
我把它命名为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)
但是,如果我使用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: {}
我得到以下
pguser@pgdb ERROR: relation "test_db" does not exist at character 15
我知道肯定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
将显示我创build的表
但是好像我在Docker撰写的应用程序找不到它
有人可以帮我吗?
关于你的docker-compose文件
-
首先,我认为这是因为你不使用“链接”选项来链接你的postgres容器到web容器 – 这是一个很好的做法,如果你不扩大端口 – 但你扩大postgres端口。
-
如果你想使用你张贴的图像的inheritance而不是使用这一行:
my_image / PostgreSQL的:9.3
使用:
docker/postgres
并创buildpathdocker/ postgres和那里从你想要的容器中吸入的Dockerfile。
-
我总是在docker-compose.yml中使用共享卷,如下所示:
.:/var/www/html
哪里.
是我放置我的代码文件的项目path。
我创build的图像来testing这种情况
我没有你的所有docker文件结构来重现这个错误,并修复它,所以我创build了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图像
-
我在旁边留言。
我如何build立连接:
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
是本地主机上的path。 你还需要在docker-compose中将凭据更改为db。 你必须在运行docker-compose之前这样做,因为如果db不存在,将会被创build。
有任何问题,请告诉我。
如果在使用docker-compose之前该卷是外部的并且已经存在,则应该将其声明为external,否则docker compose将创build一个以项目名称为前缀的新卷。
volumes: test_volume: external: true
来源: https : //docs.docker.com/compose/compose-file/#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
阅读Docker文档( https://docs.docker.com/engine/tutorials/dockervolumes/ ),观看教程(有一个Docker Youtube频道whith伟大的教程),并阅读其他主题,然后发布一个新的…
- 如何在一个组合群中获得有关我们自己的信息
- Docker和netstat:netstat没有显示docker容器公开的端口
- 如何在Dockerfile中编写docker -it选项?
- WebPageTest代理健康检查和configuration日志
- 在Mesos 0.25上安装最新的kubernetes版本(1.1.1)
- 我们可以在D11_v2 Azure Windows 10 Enterprise机器上安装Docker吗?
- 在Jenkins Shell中运行Docker命令
- Google Compute f1-micro实例上的Docker
- 在Spark独立模式下运行Spark作业服务器时出现exception