因此,我有一个用Go编写的非常简单的应用程序,该应用程序需要通过websocket连接到数据库。当我在容器中运行数据库并通过docker run -d -p 8182:8182 tinkerpop/gremlin-server
公开所需的端口(应用程序本地指向localhost:8182)时,此方法运行良好。
但是,我现在想通过compose for CI在容器内运行,而我的应用程序找不到数据库。我试过使用docker主机名,IP地址,并在0.0.0.0上侦听无济于事。目前,我的撰写看起来像这样:
version: '3'
services:
db:
image: tinkerpop/gremlin-server
hostname: gremlin
ports:
- 8182:8182
server:
build: .
environment:
ORBITAL_DB_ADDRESS: "ws://gremlin:8182"
ports:
- 5000:5000
depends_on:
- db
但是我似乎只从我的应用程序容器中收到以下消息:dial tcp: lookup gremlin on 127.0.0.11:53: no such host
。尽管我的应用在0.0.0.0上设置为ListenAndServe,但是:
err := http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", conf.Service.Port), nil)
任何帮助将非常感激。谢谢。
最佳答案
从您的原始帖子中,您可以尝试以下三件事:
将
ws://gremlin:8182
替换为ws://db:8182
depends_on
不保证这样做)简单的调试方法是先运行db
$ docker-compose -f docker-compose.yml up db
等待它准备就绪,然后在单独的控制台运行服务器中$ docker-compose -f docker-compose.yml up server
如果还有其他配置可以设置与数据库的连接,请不要忘记放置当前网络下可用的主机
本地服务器和docker中的db服务器时的
localhost
上可用db
和server
)关于docker - Go App无法通过docker-compose中的websocket连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63643865/