postgresql – 用docker-compose连接go和postgres

weixin_38086437 2019-09-12 12:41:51
我正在尝试使用docker-compose连接go和postgres容器. 这是我的docker-compose.yml: version: '2' services: postgres: image: postgres ports: - "5432" environment: - POSTGRES_PASSWORD=postgres server: build: ./server command: gin volumes: - ./server:/go/src/app ports: - "8080:3000" 起初我尝试使用docker-compose.yml中的links命令,但这并没有在服务器容器中创建任何env变量,所以这让我很困惑. (它应该创建SOMETHINGSOMETHING_PORT_5432_TCP_ADDR和SOMETHINGSOMETHING_5432_TCP_PORT,不是吗?) 然后我读到了某处我可以使用http://postgres作为主机,所以我尝试了.所以现在这就是我的main.go的样子(注意:我正在使用Gorp作为“ORM”): func main() { dbinfo := fmt.Sprintf("user=%s password=%s host=%s dbname=%s sslmode=disable", "postgres", os.Getenv("DB_ENV_POSTGRES_PASSWORD"), "http://postgres", DB_NAME, ) db, err := sql.Open("postgres", dbinfo) checkErr(err, "sql.Open failed") // construct a gorp DbMap dbmap := &gorp.DbMap{Db: db, Dialect: gorp.PostgresDialect{}} // add a table, setting the table name to 'posts' and // specifying that the Id property is an auto incrementing PK dbmap.AddTableWithName(Todo{}, "todos").SetKeys(true, "Id") // create the table. in a production system you'd generally // use a migration tool, or create the tables via scripts err = dbmap.CreateTablesIfNotExists() checkErr(err, "Create tables failed") http.HandleFunc("/", handler) http.ListenAndServe(":3001", nil) } 这是docker-compose的详细日志(我在端口5432上拒绝连接): ←[36mserver_1 |←[0m [gin] listening on port 3000 ←[33mpostgres_1 |←[0m The files belonging to this database system will be owned by user "postgres". ←[33mpostgres_1 |←[0m This user must also own the server process. ←[33mpostgres_1 |←[0m ←[33mpostgres_1 |←[0m The database cluster will be initialized with locale "en_US.utf8". ←[33mpostgres_1 |←[0m The default database encoding has accordingly been set to "UTF8". ←[33mpostgres_1 |←[0m The default text search configuration will be set to "english". ←[33mpostgres_1 |←[0m ←[33mpostgres_1 |←[0m Data page checksums are disabled. ←[33mpostgres_1 |←[0m ←[33mpostgres_1 |←[0m fixing permissions on existing directory /var/lib/postgresql/data ... ok ←[33mpostgres_1 |←[0m creating subdirectories ... ok ←[33mpostgres_1 |←[0m selecting default max_connections ... 100 ←[33mpostgres_1 |←[0m selecting default shared_buffers ... 128MB ←[33mpostgres_1 |←[0m selecting dynamic shared memory implementation ... posix ←[33mpostgres_1 |←[0m creating configuration files ... ok ←[33mpostgres_1 |←[0m creating template1 database in /var/lib/postgresql/data/base/1 ... ok ←[33mpostgres_1 |←[0m initializing pg_authid ... ok ←[33mpostgres_1 |←[0m initializing dependencies ... ok ←[33mpostgres_1 |←[0m creating system views ... ok ←[33mpostgres_1 |←[0m loading system objects' descriptions ... ok ←[33mpostgres_1 |←[0m creating collations ... ok ←[33mpostgres_1 |←[0m creating conversions ... ok ←[33mpostgres_1 |←[0m creating dictionaries ... ok ←[33mpostgres_1 |←[0m setting privileges on built-in objects ... ok ←[33mpostgres_1 |←[0m creating information schema ... ok ←[33mpostgres_1 |←[0m loading PL/pgSQL server-side language ... ok ←[33mpostgres_1 |←[0m vacuuming database template1 ... ok ←[33mpostgres_1 |←[0m copying template1 to template0 ... ok ←[33mpostgres_1 |←[0m copying template1 to postgres ... ok ←[33mpostgres_1 |←[0m syncing data to disk ... ok ←[33mpostgres_1 |←[0m ←[33mpostgres_1 |←[0m WARNING: enabling "trust" authentication for local connections ←[33mpostgres_1 |←[0m You can change this by editing pg_hba.conf or using the option -A, or ←[33mpostgres_1 |←[0m --auth-local and --auth-host, the next time you run initdb. ←[33mpostgres_1 |←[0m ←[33mpostgres_1 |←[0m Success. You can now start the database server using: ←[33mpostgres_1 |←[0m ←[33mpostgres_1 |←[0m pg_ctl -D /var/lib/postgresql/data -l logfile start ←[33mpostgres_1 |←[0m ←[33mpostgres_1 |←[0m waiting for server to start....LOG: database system was shut down at 2016-08-19 18:31:55 UTC ←[33mpostgres_1 |←[0m LOG: MultiXact member wraparound protections are now enabled ←[33mpostgres_1 |←[0m LOG: database system is ready to accept connections ←[33mpostgres_1 |←[0m LOG: autovacuum launcher started ←[33mpostgres_1 |←[0m done ←[33mpostgres_1 |←[0m server started ←[33mpostgres_1 |←[0m ALTER ROLE ←[33mpostgres_1 |←[0m ←[33mpostgres_1 |←[0m ←[33mpostgres_1 |←[0m /docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/* ←[33mpostgres_1 |←[0m ←[33mpostgres_1 |←[0m LOG: received fast shutdown request ←[33mpostgres_1 |←[0m LOG: aborting any active transactions ←[33mpostgres_1 |←[0m LOG: autovacuum launcher shutting down ←[33mpostgres_1 |←[0m LOG: shutting down ←[33mpostgres_1 |←[0m waiting for server to shut down....LOG: database system is shut down ←[33mpostgres_1 |←[0m done ←[33mpostgres_1 |←[0m server stopped ←[33mpostgres_1 |←[0m ←[33mpostgres_1 |←[0m PostgreSQL init process complete; ready for start up. ←[33mpostgres_1 |←[0m ←[33mpostgres_1 |←[0m LOG: database system was shut down at 2016-08-19 18:31:57 UTC ←[33mpostgres_1 |←[0m LOG: MultiXact member wraparound protections are now enabled ←[33mpostgres_1 |←[0m LOG: database system is ready to accept connections ←[33mpostgres_1 |←[0m LOG: autovacuum launcher started ←[36mserver_1 |←[0m 2016/08/19 18:32:05 Create tables failed dial tcp [::1]:5432: getsockopt: connection refused ←[36mserver_1 |←[0m 2016/08/19 18:32:05 http: proxy error: dial tcp [::1]:3001: getsockopt: connection refused ←[36mserver_1 |←[0m 2016/08/19 18:32:05 Create tables failed dial tcp [::1]:5432: getsockopt: connection refused ←[36mserver_1 |←[0m 2016/08/19 18:32:05 http: proxy error: dial tcp [::1]:3001: getsockopt: connection refused 所以我的问题是如何让这些能够彼此交谈以及我在这里做错了什么?
...全文
212 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38104763 2019-09-12
  • 打赏
  • 举报
回复
这是一个码头网络问题.你可以阅读更多关于它的here.Docker dns可以完成所有艰苦的工作,因此您可以通过compose文件中的名称访问每个容器. Posgres网址通常像 postgresql://user:password@ip:port/database 所以对你来说,就像是. db, err := sql.Open("postgres", "postgresql://user:password@postgres/mydatabase) 请注意,如果postgres位于标准端口(5432)上,则不需要该端口.

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧