Docker中来自应用程序容器的Cassandra客户端连接问题

Docker中来自应用程序容器的Cassandra客户端连接问题,docker,cassandra,docker-compose,Docker,Cassandra,Docker Compose,我正在运行我的应用程序和一个Cassandra容器,试图建立从应用程序容器到Cassandra容器的连接 我试过用docker compose。它抛出同样的错误。它能够解析正确的容器IP(如您所见),但无法连接 我试图通过单独启动cassandra容器并在我的应用程序容器中硬编码IP来运行,但仍然失败 Cassandra容器工作正常,如果我在外部运行相同的应用程序,它会连接 问题是,它无法从应用程序容器解析Cassandra容器IP。不知道为什么 我还启用了start\u rpc,并公开了所有与

我正在运行我的应用程序和一个Cassandra容器,试图建立从应用程序容器到Cassandra容器的连接

  • 我试过用docker compose。它抛出同样的错误。它能够解析正确的容器IP(如您所见),但无法连接
  • 我试图通过单独启动cassandra容器并在我的应用程序容器中硬编码IP来运行,但仍然失败
  • Cassandra容器工作正常,如果我在外部运行相同的应用程序,它会连接 问题是,它无法从应用程序容器解析Cassandra容器IP。不知道为什么


    我还启用了
    start\u rpc
    ,并公开了所有与cassandra相关的端口。还是没运气

    您可以创建Docker网络,并将Cassandra和您的应用程序连接到同一网络


    您还需要检查Cassandra正在侦听哪些接口-是单个接口还是所有接口

    您可以创建Docker网络,并将Cassandra和您的应用程序连接到同一网络

    您还需要检查Cassandra正在侦听哪些接口-是单个接口还是所有接口

    发行 [Control connection]在/IP:9042连接上出错,没有更多主机可供尝试

    解决方案 愚蠢但重要的检查“应用程序尝试在cassandra启动之前连接”

    RPC_添加默认IP问题

    因为容器有自己的网络。因此,每个容器都有自己的IP。当您的RPC_ADDESS设置为容器IP时,它将通过此错误

    在Cassandra配置中,更改

    rpc_address(默认值:localhost)客户端的侦听地址 连接(Thrift RPC服务和本机传输)。 有效值:

  • 取消设置:使用配置的主机名解析地址
  • 节点的配置。如果未设置,主机名将解析为 使用/etc/hostname、/etc/hosts或DNS的此节点的IP地址

  • 0.0.0.0:侦听所有配置的接口。必须将广播_rpc_地址设置为0.0.0.0以外的值
  • IP地址 4.主机名
  • RPC_地址=0.0.0.0

    这里是docker compose.yml文件

    batchWorker_1  | [DEBUG] 2017-10-30 12:42:10.035 [cluster1-nio-worker-0] Connection - Connection[/172.17.0.3:9042-1, inFlight=0, closed=false] Error connecting to /172.17.0.3:9042 (connection timed out: /172.17.0.3:9042)
    batchWorker_1  | [DEBUG] 2017-10-30 12:42:10.037 [cluster1-nio-worker-0] STATES - Defuncting Connection[/172.17.0.3:9042-1, inFlight=0, closed=false] because: [/172.17.0.3:9042] Cannot connect
    batchWorker_1  | [DEBUG] 2017-10-30 12:42:10.038 [cluster1-nio-worker-0] STATES - [/172.17.0.3:9042] preventing new connections for the next 1000 ms
    batchWorker_1  | [DEBUG] 2017-10-30 12:42:10.038 [cluster1-nio-worker-0] STATES - [/172.17.0.3:9042] Connection[/172.17.0.3:9042-1, inFlight=0, closed=false] failed, remaining = 0
    batchWorker_1  | [DEBUG] 2017-10-30 12:42:10.039 [cluster1-nio-worker-0] Connection - Connection[/172.17.0.3:9042-1, inFlight=0, closed=true] closing connection
    batchWorker_1  | [DEBUG] 2017-10-30 12:42:10.042 [main] ControlConnection - [Control connection] error on /172.17.0.3:9042 connection, no more host to try
    batchWorker_1  | com.datastax.driver.core.exceptions.TransportException: [/172.17.0.3:9042] Cannot connect
    batchWorker_1  |    at com.datastax.driver.core.Connection$1.operationComplete(Connection.java:165) ~[batch_worker_server.jar:0.01]
    batchWorker_1  |    at com.datastax.driver.core.Connection$1.operationComplete(Connection.java:148) ~[batch_worker_server.jar:0.01]
    ...
    
    问题 [Control connection]在/IP:9042连接上出错,没有更多主机可供尝试

    解决方案 愚蠢但重要的检查“应用程序尝试在cassandra启动之前连接”

    RPC_添加默认IP问题

    因为容器有自己的网络。因此,每个容器都有自己的IP。当您的RPC_ADDESS设置为容器IP时,它将通过此错误

    在Cassandra配置中,更改

    rpc_address(默认值:localhost)客户端的侦听地址 连接(Thrift RPC服务和本机传输)。 有效值:

  • 取消设置:使用配置的主机名解析地址
  • 节点的配置。如果未设置,主机名将解析为 使用/etc/hostname、/etc/hosts或DNS的此节点的IP地址

  • 0.0.0.0:侦听所有配置的接口。必须将广播_rpc_地址设置为0.0.0.0以外的值
  • IP地址 4.主机名
  • RPC_地址=0.0.0.0

    这里是docker compose.yml文件

    batchWorker_1  | [DEBUG] 2017-10-30 12:42:10.035 [cluster1-nio-worker-0] Connection - Connection[/172.17.0.3:9042-1, inFlight=0, closed=false] Error connecting to /172.17.0.3:9042 (connection timed out: /172.17.0.3:9042)
    batchWorker_1  | [DEBUG] 2017-10-30 12:42:10.037 [cluster1-nio-worker-0] STATES - Defuncting Connection[/172.17.0.3:9042-1, inFlight=0, closed=false] because: [/172.17.0.3:9042] Cannot connect
    batchWorker_1  | [DEBUG] 2017-10-30 12:42:10.038 [cluster1-nio-worker-0] STATES - [/172.17.0.3:9042] preventing new connections for the next 1000 ms
    batchWorker_1  | [DEBUG] 2017-10-30 12:42:10.038 [cluster1-nio-worker-0] STATES - [/172.17.0.3:9042] Connection[/172.17.0.3:9042-1, inFlight=0, closed=false] failed, remaining = 0
    batchWorker_1  | [DEBUG] 2017-10-30 12:42:10.039 [cluster1-nio-worker-0] Connection - Connection[/172.17.0.3:9042-1, inFlight=0, closed=true] closing connection
    batchWorker_1  | [DEBUG] 2017-10-30 12:42:10.042 [main] ControlConnection - [Control connection] error on /172.17.0.3:9042 connection, no more host to try
    batchWorker_1  | com.datastax.driver.core.exceptions.TransportException: [/172.17.0.3:9042] Cannot connect
    batchWorker_1  |    at com.datastax.driver.core.Connection$1.operationComplete(Connection.java:165) ~[batch_worker_server.jar:0.01]
    batchWorker_1  |    at com.datastax.driver.core.Connection$1.operationComplete(Connection.java:148) ~[batch_worker_server.jar:0.01]
    ...
    

    rpc_地址:0.0.0.0#rpc#u接口:eth1#rpc#u接口#u首选_ipv6:false rpc#u端口:9160广播#rpc#u地址:172.22.0.2这是我在容器内的cassandra.yaml中的内容。即使我创建网络并在docker compose文件中添加默认外部网络,它仍然无法连接。我的卡桑德拉·亚马尔有什么需要改变的吗@alex-ottrpc_地址:0.0.0.0#rpc#u接口:eth1#rpc#u接口#u首选#u ipv6:false rpc#u端口:9160广播#rpc#u地址:172.22.0.2这是我在容器内的cassandra.yaml中拥有的内容。即使我在docker compose文件中创建网络并添加默认外部网络,它仍然无法连接。我的卡桑德拉·亚马尔有什么需要改变的吗@亚历克斯:我正在尝试。不过,我已经解决了这个问题。如果我使用
    --network preexistingnetwork
    的预先存在的网络运行我的容器,然后在docker compose中将其作为默认的预先存在的网络与已检查的IP一起提供,那么它可以工作,否则就不能工作。基本上,当通过为cassandra编写文件启动时,网络并没有得到解决。不知道为什么。您的应用程序和cassandra都在同一台服务器上吗?使用一个网络运行cassandra,使用外部网络、本地计算机运行应用程序。仅用于测试目的。如果您可以向我指出任何服务+应用程序docker,请使用网络示例编写v3。如果卡桑德拉的docker compose和应用程序的docker compose都在同一个文件夹中,那就太棒了。当您在文件夹中创建包含compose的容器时,它会创建一个默认为folderName_的网络,如果两个compose文件都位于同一文件夹中,那么它们都将在同一网络下运行。所以需要创建一个外部网络。如果两者都在不同的文件夹中,那么你需要创建一个网络并使其在该网络下运行。我能想到的一个愚蠢的原因是,也许该应用程序会在cassandra启动并运行之前尝试连接。(我添加了链接并依赖于,但我想我还需要添加healthcheck以确保客户端连接是可能的。)我正在尝试这个。不过,我已经解决了这个问题。如果我使用
    --network preexistingnetwork
    的预先存在的网络运行我的容器,然后在docker compose中将其作为默认的预先存在的网络与已检查的IP一起提供,那么它可以工作,否则就不能工作。基本上,当通过为cassandra编写文件启动时,网络并没有得到解决。不知道为什么。您的应用程序和cassandra都在同一台服务器上吗?使用一个网络运行cassandra,使用外部网络、本地计算机运行应用程序。仅用于测试目的。如果您能告诉我任何服务+应用程序docker,请使用networ编写v3