docker - Go App无法通过docker-compose中的websocket连接

标签 docker go websocket docker-compose docker-networking

因此,我有一个用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上可用
  • 都在docker-compose中运行时,主机分别是dbserver)

  • 关于docker - Go App无法通过docker-compose中的websocket连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63643865/

    相关文章:

    docker - 如果 Docker 在 windows 上原生运行,那为什么需要 hyper-v

    php - 如何使用 bash 脚本自动将密码输入到 docker 容器中?

    docker - 如何在 Docker 上发布 UDP 端口?

    mongodb - 由于超时,UpdateOne 在客户端失败,但 MongoDB 仍然处理它

    arrays - 将多个返回函数分配给容器(列表)

    go - 类型接口(interface){}不支持索引

    javascript - 在单个 Javascript 函数中处理多个 websocket 订阅,但只处理一个连接对象

    c# - 如何在 asp.net core 中使用 websockets

    php - Docker-Compose 不会批量处理我的 php.ini 文件

    java - GRPC 服务器响应延迟