Nomad 连接两个 docker 容器

Posted

技术标签:

【中文标题】Nomad 连接两个 docker 容器【英文标题】:Nomad Connect Two docker Containers 【发布时间】:2021-11-24 05:24:29 【问题描述】:

我无法通过 nomad 在两个 docker 容器之间建立通信。容器在同一个任务组中,但仍然无法相互访问。即使使用 NOMAD_ADDR_ 环境变量。任何人都可以在这方面提供帮助吗?我尝试了主机和桥接网络模式。

我的游牧配置如下。图像被拉取,Redis 容器和应用程序容器启动,但随后应用程序容器因 Redis Connection Refused 错误

而崩溃

第二个问题是,正如您可能已经猜到的那样,使用适当的缩进等美化代码。就像 javascripthtml 或 YAML 在 VS 代码中自动格式化一样。我找不到 HCL 语言的代码修饰符。

job "app-deployment" 
  datacenters = ["dc1"]

  group "app" 
   network 
    mode = "bridge"
    port "web-ui"  to = 5000 
    port "redis"  to = 6379 
  
   service 
        name = "web-ui"
        port = "web-ui"
        // check 
        //   type     = "http"
        //   path     = "/health"
        //   interval = "2s"
        //   timeout  = "2s"
        // 
     

    task "myapp" 
      driver = "docker"
      config 
          image_pull_timeout = "10m"

          image = "https://docker.com"
          ports = ["web-ui"]
        
       env 
            REDIS_URL="redis://$NOMAD_ADDR_redis"
            // REDIS_URL="redis://$NOMAD_IP_redis:$NOMAD_PORT_redis"
            NODE_ENV="production"
          
       
    task "redis" 
    driver = "docker"
    config 
      image = "redis"
      ports = ["redis"]
      
    
    
  
  


【问题讨论】:

这能回答你的问题吗? how can I connect two docker containers with nomad 【参考方案1】:

所以我基本上能够解决它,当您在开发模式下启动 nomad 代理时,默认情况下它绑定到环回接口,这就是为什么您在 NOMAD 环境变量中获得 127.0.0.1 作为 IP 和节点端口的原因。 127.0.0.1 解析为容器内的 localhost,因此无法访问 Redis 服务器。

要解决这个问题,只需运行

ip a

确定我的主要网络接口,它是我的 wifi 接口。然后像下面这样启动游牧民族。

nomad agent -dev -network-interface="en0"
# where en0 is the primary network interface

这样你仍然可以访问 localhost:4646 上的游牧 UI,但你的容器将从你的网络获取 HOST IP,而不是 127.0.0.1

【讨论】:

理想情况下,您应该安装 Consul,然后使用服务名称发现在整个集群中的容器之间进行通信,而不是仅在一台主机上进行通信

以上是关于Nomad 连接两个 docker 容器的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Nomad 与 Nvidia Docker 一起使用?

docker容器之间的连接

docker容器之间的连接

如何在 HashiCorp nomad 环境中管理网络和存储?

Docker节点应用程序无法连接链接的mysql容器

Docke及Docker Compose于微服务的实践