Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't connect to Cassandra Docker Container

I have official Cassandra docker container running but I'm not able to access from a sample console application. I'm using docker for Windows using Hyper-V

I create the container using the following command: docker run --name dev-cassandra -d cassandra:latest

When I ran the application it give the following error

An unhandled exception of type 'Cassandra.NoHostAvailableException' occurred in Cassandra.dll

Sample Code

class Program
{
    static void Main(string[] args)
    {

        var cluster = Cassandra.Cluster.Builder().AddContactPoint("172.17.0.2").Build();
        var session = cluster.Connect("Excelsior");
        var rs = session.Execute("SELECT * FROM sample_table");
        //Iterate through the RowSet
        foreach (var row in rs)
        {
            var value = row.GetValue<int>("sample_int_column");
            //do something with the value
        }
        Console.WriteLine("Hello World!");
    }
}

The container is running I checked by running the following command: docker ps

enter image description here

To get the network information, I ran this command: network inspect bridge

[
    {
        "Name": "bridge",
        "Id": "010bdd729d44a99183e45723626576fa6ce607069fb5ca0f52606eaa5395b573",
        "Created": "2017-05-05T22:46:13.4234063Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Containers": {
            "6f6a0c0d2f77a03bc0f665d17d7c1d134667bc614e1ed53025b8b1c1c251960b": {
                "Name": "dev-cassandra",
                "EndpointID": "bded37dd1e6694705e045848b918ef35f9b7983e00f267f311d66a560a5f2f13",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

I also ran this comand docker inspect cassandra to get the configuration. docker.

[
    {
        "Id": "sha256:069269e2357899979df679173096db557fbdd84a82ffd2b08b139f974a36457a",
        "RepoTags": [
            "cassandra:latest"
        ],
        "RepoDigests": [
            "cassandra@sha256:b7fca4d04fdaa10ba4f187d74649f4cd59a4b5018253d58b837cdd1b02ddfe3f"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2017-03-21T20:13:44.022375976Z",
        "Container": "ec6b65101d9f5d335e2820809d2dda12eabaebfb21b2f362d67066521468b809",
        "ContainerConfig": {
            "Hostname": "7e9ec6cde4d1",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "7000/tcp": {},
                "7001/tcp": {},
                "7199/tcp": {},
                "9042/tcp": {},
                "9160/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.7",
                "GPG_KEYS=514A2AD631A57A16DD0047EC749D6EEC0353B12C \tA26E528B271F19B9E5D8E19EA278B781FE4B2BDA",
                "CASSANDRA_VERSION=3.10",
                "CASSANDRA_CONFIG=/etc/cassandra"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"cassandra\" \"-f\"]"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:ada42f145ac8582ed811da1a1353369d4ac65d5830f9a80f657433676f1802de",
            "Volumes": {
                "/var/lib/cassandra": {}
            },
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": [],
            "Labels": {}
        },
        "DockerVersion": "1.12.6",
        "Author": "",
        "Config": {
            "Hostname": "7e9ec6cde4d1",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "7000/tcp": {},
                "7001/tcp": {},
                "7199/tcp": {},
                "9042/tcp": {},
                "9160/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.7",
                "GPG_KEYS=514A2AD631A57A16DD0047EC749D6EEC0353B12C \tA26E528B271F19B9E5D8E19EA278B781FE4B2BDA",
                "CASSANDRA_VERSION=3.10",
                "CASSANDRA_CONFIG=/etc/cassandra"
            ],
            "Cmd": [
                "cassandra",
                "-f"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:ada42f145ac8582ed811da1a1353369d4ac65d5830f9a80f657433676f1802de",
            "Volumes": {
                "/var/lib/cassandra": {}
            },
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": [],
            "Labels": {}
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 385729595,
        "VirtualSize": 385729595,
        "GraphDriver": {
            "Name": "overlay2",
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/5cdd50711a30b35eac48952b286bb61e9c3d443ee07d5715c20c536a81d810e0/diff:/var/lib/docker/overlay2/b602b88eae488165e8c401065eea689acd103950f7ebdf65347ac28e87ef936f/diff:/var/lib/docker/overlay2/81c6762aa1ddd5b7c44ca8c1cff05f718cedf2cc0ba40f6f42775a166e218205/diff:/var/lib/docker/overlay2/529349dc7ce84eb4fc54ed4f677d96c5f0fdce90a26c1ed15251304dfc0e35ac/diff:/var/lib/docker/overlay2/f121b1f27ad21ceb0e2d7dbadf8c8ef86483fb52d37652fb3a1527e8d555408d/diff:/var/lib/docker/overlay2/07df2fac46233c52197c3f2c0604cbc99b7e1cc2958f22688f6e2fbd8b94840f/diff:/var/lib/docker/overlay2/373f1208a1f44a068bcf92f9d976b67f541700bee1cbd339b7c63507752581c0/diff:/var/lib/docker/overlay2/9a89ae5b436a90085a5026ed21aa094faa070b856ef375b5b8f8718543c3b281/diff:/var/lib/docker/overlay2/9ca3fdc3437863f6626a39f0b60cc73bb1bda813317b630e011d481a81703e43/diff:/var/lib/docker/overlay2/66b2788945d88001b6fa13001952691c7039e634237d434d80b224352284ac2a/diff:/var/lib/docker/overlay2/1834e9892519424500e3e5088cadb542f24054979974cf89fbe28ad4053ca73d/diff",
                "MergedDir": "/var/lib/docker/overlay2/900c01f3f2a541d26cde9813f21c36ae4cf44568ac7a33d24246ef14b3c610d8/merged",
                "UpperDir": "/var/lib/docker/overlay2/900c01f3f2a541d26cde9813f21c36ae4cf44568ac7a33d24246ef14b3c610d8/diff",
                "WorkDir": "/var/lib/docker/overlay2/900c01f3f2a541d26cde9813f21c36ae4cf44568ac7a33d24246ef14b3c610d8/work"
            }
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:5d6cbe0dbcf9a675e86aa0fbedf7ed8756d557c7468d6a7c64bde7fa9e029636",
                "sha256:aa4c186185aa90ac9c821a3c328cfbb21672dad969c9f9bc5151a5f4c341f970",
                "sha256:9d82a392a50d6b0a8cb4e717d02b83727429118f7f215c7a5ed5f7006557b525",
                "sha256:23f60ed07f46279b0e9b13521bb74570bf2d0c6b2763d5b072de4f6fd59cff3f",
                "sha256:8a2c71106b17a02037ab131a45d9b076338121abc9d12aa9a1bc2f818514cda0",
                "sha256:da91891b3c4c6cdfaff6960288166789da406078a20eddb5e961f5383d62a69f",
                "sha256:43ab122f258f04014a344119e7cf8187c055a618993398973f0c7eeafa5def83",
                "sha256:bcdcd03011e6ae49a63e85a099fd0067d7676e04e85eebecf65baa43823214ab",
                "sha256:08adfaf9cb5b340c7a3abbe98be3c30cc0a789a049206bf4735c6e297e12eb55",
                "sha256:6a2d68da5af1253a40cf952283f66b5e3ed0c8a55e34c6aac544358ed310a452",
                "sha256:93cb898347afdcaf66fbe8ebf1d1aa1e8ce77f4e9d73fb20e5f5531672b24bbd",
                "sha256:5b4b685f0f11fa1d4479fdd127852b16322b85ec1568d36cf18f40f99d37bd67"
            ]
        }
    }
]
like image 677
Son_of_Sam Avatar asked Sep 07 '25 02:09

Son_of_Sam


1 Answers

Assuming your C# code is running in Visual Studio on your local machine (and not in a Docker container also), you've got two problems here. First, you didn't expose any ports on the Cassandra container to the host. The port in particular that you need is 9042 since that's where the CQL binary protocol accepts client connections. So, for example to expose container port 9042 as port 9042 on the host, you need to do:

> docker run --name dev-cassandra -d -p 9042:9042 cassandra:latest

Since you're using Docker for Windows, any ports that you expose on the host this way will now be available via localhost or 127.0.0.1. So, the second problem you have is the IP address you're trying to use when connecting from the code running on your host machine to the Docker container. The IP address you're using is for the container on Docker's internal bridge network, so that IP address would only work if your C# code was also running in a Docker container (connected to that same bridge network).

Your code to create the cluster should be:

var cluster = Cassandra.Cluster.Builder().AddContactPoint("127.0.0.1").Build();

The driver will automatically default to port 9042. Hope that helps!

like image 194
Luke Tillman Avatar answered Sep 08 '25 15:09

Luke Tillman