这是我正在使用的
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不存在,那么它将被装箱.
任何问题,让我知道.