C# Can';t连接到Cassandra Docker容器

C# Can';t连接到Cassandra Docker容器,c#,docker,cassandra,C#,Docker,Cassandra,我有官方的Cassandra docker容器在运行,但我无法从示例控制台应用程序访问。我正在使用docker for Windows使用Hyper-V 我使用以下命令创建容器:dockerrun--name dev cassandra-d cassandra:latest 当我运行应用程序时,它给出了以下错误 An unhandled exception of type 'Cassandra.NoHostAvailableException' occurred in Cassandra.dll

我有官方的Cassandra docker容器在运行,但我无法从示例控制台应用程序访问。我正在使用docker for Windows使用Hyper-V

我使用以下命令创建容器:
dockerrun--name dev cassandra-d cassandra:latest

当我运行应用程序时,它给出了以下错误

An unhandled exception of type 'Cassandra.NoHostAvailableException' occurred in Cassandra.dll
示例代码

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!");
    }
}
我还运行了这个comand
docker inspect cassandra
来获取配置。码头工人

[
    {
        "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"
            ]
        }
    }
]
假设您的C#代码在本地机器上的Visual Studio中运行(也不在Docker容器中),那么这里有两个问题。首先,您没有向主机公开Cassandra容器上的任何端口。您特别需要的端口是
9042
,因为这是CQL二进制协议接受客户端连接的地方。因此,例如,要在主机上将容器端口
9042
公开为端口
9042
,您需要执行以下操作:

> docker run --name dev-cassandra -d -p 9042:9042 cassandra:latest
由于您使用的是Docker for Windows,因此现在可以通过
localhost
127.0.0.1
使用以这种方式在主机上公开的任何端口。因此,第二个问题是从主机上运行的代码连接到Docker容器时尝试使用的IP地址。您使用的IP地址用于Docker内部网桥网络上的容器,因此,只有当您的C#代码也在Docker容器(连接到同一网桥网络)中运行时,IP地址才会起作用

创建群集的代码应为:

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

驱动程序将自动默认为端口
9042
。希望有帮助

我不太熟悉Windows VM配置,所以请原谅我的无知,但是。。。您是否应该链接或公开容器中的端口?您的程序似乎看不到此主机。您是否尝试在不使用Cassandra连接器的情况下通过该IP从C#程序查找虚拟主机(来宾)?
var cluster = Cassandra.Cluster.Builder().AddContactPoint("127.0.0.1").Build();