Skip to main content
 首页 » 编程设计

python之Aerospike docker 连接被拒绝使用 docker 服务名

2024年09月03日30fff_TT

我正在尝试使用 aerospike docker 容器,python 应用程序也运行相同的 docker 网络。下面是 docker compose 文件。

aerospike: 
    image: aerospike/aerospike-server 
    volumes:  
      - "./aerospikeconfig:/opt/aerospike/etc" 
    environment:  
      config-file: /opt/aerospike/etc/aerospike.conf 
 
  rtbconsumer: 
    image: abhinav054/rtb_consumer:trending 
    depends_on:  
      - aerospike 
      - kafka 
    environment:  
      CONSUMER_ID: "rtb_aerospike_2" 
      HOST: "kafka:9092" 
      TOPIC: "rtb-logs" 
      AEROSPIKE_HOST: "aerospike:3000" 

所以在我的脚本中,我使用下面给定的配置连接 aerospike

config = {  
      'hosts':[('aerospike', 3000)], 
      'policies': { 
        'timeout': 1000 # milliseconds 
      } 
    } 

我得到的错误是exception.ConnectionError: (-10, 'Failed to connect', 'src/main/aerospike/as_cluster.c', 254, False)

谁能帮我解决这个问题。

请您参考如下方法:

针对您的问题,这也应该解决您的问题:

@QuintenScheppermans ain't the default network bridge, I am a bit rusty on the networking. Can you send some sample.

是的,容器会自动添加到默认的桥接网络中。但是,Docker 不支持默认桥接网络上的自动服务发现。如果您希望容器能够通过容器名称解析 IP 地址,您应该改用用户定义的网络。

这正是您在这里所做的:

config = {  
  'hosts':[('aerospike', 3000)], 
  'policies': { 
    'timeout': 1000 # milliseconds 
  } 
} 

所以你确实需要配置一个用户定义的网络。 桥接网络推荐用于单主机网络(就像你的情况一样) 建议将覆盖网络用于多个主机网络。

您可以使用 Ivolmar 的答案并将其切换到桥接网络。 如果您不想要,则不需要使用 docker swarm。