扩展dockerpostgres图像来创build额外的数据库

我已经看到了这个主题: https : //stackoverflow.com/a/26599273/2323245

但是我有以下问题:

postgres_1 | FATAL: role "docker" does not exist app_1 | Error: Could not establish a connection with the database 

这是我的docker-compose.yml文件

 version: "2" services: app: build: context: . dockerfile: Dockerfiles/app.dockerfile links: - postgres depends_on: - postgres ports: - "8080:8080" environment: PORT: 8080 networks: - neo_dev restart: always postgres: build: context: . dockerfile: Dockerfiles/postgres.dockerfile networks: - neo_dev volumes: - postgresql:/var/lib/postgresql # This needs explicit mapping due to https://github.com/docker-library/postgres/blob/4e48e3228a30763913ece952c611e5e9b95c8759/Dockerfile.template#L52 - postgresql_data:/var/lib/postgresql/data ports: - "5430:5432" #in case you already have postgres running in your host machine networks: neo_dev: driver: bridge volumes: postgresql: postgresql_data: 

我的postgres.docker文件是

 FROM library/postgres MAINTAINER Samir Bouaked "sbouaked@neocasesoftware.com" ADD Dockerfiles/init.sql /docker-entrypoint-initdb.d/ 

这是我的init.sql文件

 CREATE USER docker with password 'docker'; CREATE DATABASE docker; GRANT ALL PRIVILEGES ON DATABASE docker TO docker; 

在我的golang应用程序中,我试图与数据库连接

 router.GET("/db", func(c *gin.Context) { db, err := sql.Open("postgres", "host=postgres port=5432 user=docker dbname=docker password=docker sslmode=disable") if err != nil { log.Fatal("Error: The data source arguments are not valid - " + err.Error()) } err = db.Ping() if err != nil { log.Println("Error: Could not establish a connection with the database") c.String(http.StatusOK, "hotstName : %s\nDbStatus : %s", os.Getenv("HOSTNAME"), err) } else { c.String(http.StatusOK, "\nhotstName : %s\nDbStatus : connection ok !\n", os.Getenv("HOSTNAME")) } defer db.Close() }) 

我尝试了不同的解决scheme,像直接在Dockerfile envvariables中传递

 ENV POSTGRES_USER docker ENV POSTGRES_PASSWORD docker ENV POSTGRES_DB docker 

但总是有相同的结果…有关更多信息,你可以检查这个回购https://github.com/neocase/docker-go-starter-kit

我不明白这个问题

这是一个docker大小的问题。

我不得不docker volume rm postgresvolume并再次做一个docker-compose up --build

这不是一个环境variables的问题,只是init.sql是现金而不是开始运行的事实。 这是由于一些testing我做了项目的开始

如果你想通过使用docker-compose传递ENVvariables来创build数据库,你可以指定类似的东西

  postgres: container_name: postgres image: library/postgres ports: - "5432:5432" environment: - POSTGRES_DATABASE=docker - POSTGRES_USER=docker - POSTGRES_PASSWORD=docker - POSTGRES_ADMIN_PASSWORD=docker 

在您撰写的YML文件中。 这应该创build一个带有用户/ pwd泊坞窗的数据库泊坞窗的postgres容器,不再需要你自己的dockerfile(所以你可以使用任何支持这种行为的postgres图像)

运行compose之后(如果它不能像预期的那样工作),你应该看看日志,如果你的postgres容器工作,或者如果你的应用程序有问题。