Docker中的数据库pipe理

我是Docker开发环境的新手。 在我的JHipster Docker环境中,当我启动Docker镜像时,遇到了“关系”错误“已经存在”。 数据库模式更改后发生此错误。 以下是docker-compose.yml文件:

 version: '2' services: foo-app: image: foo environment: - SPRING_PROFILES_ACTIVE=prod,swagger - SPRING_DATASOURCE_URL=jdbc:postgresql://foo-postgresql:5432/foo - JHIPSTER_SLEEP=10 # gives time for the database to boot before the applicationelasticsearch:9300 ports: - 8080:8080 foo-postgresql: extends: file: foo.yml service: foo-postgresql 

foo.yml文件如下:

 version: '2' services: foo-postgresql: image: postgres:9.6.5 # volumes: # - ~/volumes/jhipster/foo/postgresql/:/var/lib/postgresql/data/ environment: - POSTGRES_USER=foo - POSTGRES_PASSWORD= ports: - 5432:5432 

在这一点上,我可以删除数据库表,因为应用程序没有启动,数据库是。 然而,我并不认为这是一个数据库pipe理的正确方法。 我也可以用命令调出数据库镜像

 docker run -i -t '<DB image name>' /bin/bash 

但是,我不能用命令访问数据库

 psql -h 127.0.0.1 -p 5432 -U postgres 

什么是在Docker中pipe理数据库的正确方法?

说实话,因为你遇到了同样的问题,我使用了云数据库服务(AWS RDS),而不是托pipe数据库的docker容器。 我仍然在本地/ qa环境中使用Docker数据库容器,因为这些环境不需要可扩展。

对于开发我把两个服务(应用程序/数据库)在docker-compose.yml文件中,并使用bash脚本启动它。 在脚本中,我放了一些睡眠命令来确保数据库已经准备就绪,然后再启动应用程序。 我正在使用mysql容器,通常40秒是足够的时间来确保mysql服务启动。 不是一个生产就绪的情况,但我不能得到一个很好的解决scheme,搞清楚,如果我的db容器已经可用。

在具有RDS的生产环境或HA环境中,数据库始终可用,因此,当将新的docker容器添加到群集时,不会等待依赖的数据库容器。

以下是启动服务并等待的脚本:

 #!/bin/bash ## Use environment variable set in the .env file. source ./.env ###Name the container and launch, Check docker-compose.yml #### echo "Starting Docker containers ..." CONTAINER=${CONTAINER_NAME} docker-compose up -d sleep 20 echo "..." sleep 20 Continue with my app setup...