Tag: tcp ip

C应用程序服务器/客户端在Docker容器中不起作用

我是Docker的新手。 我写了一个服务器/客户端(非常简单)的应用程序,他们都在同一个容器中运行。 我正在使用OSX,当我将客户端连接到服务器时,它工作得很好。 但是,我无法将我的客户端连接到我的服务器。 这是我的代码: client.c: #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <arpa/inet.h> int main(int argc, char *argv[]) { int sockfd = 0, n = 0; char recvBuff[1024]; struct sockaddr_in serv_addr; if(argc != 2) { printf("\n Usage: %s <ip of server> \n",argv[0]); […]

docker集装箱是否有自己的TCP / IP堆栈?

我试图了解在连接到主机的线路上发送的一个networking数据包发送到一个Docker容器内的应用程序的情况。 如果它是一个典型的虚拟机,我知道到达主机的数据包将被虚拟机pipe理程序(比如VMware,VBox等)发送到虚拟机的虚拟网卡,然后通过客户机操作系统的TCP / IP协议栈,最后到达申请。 在Docker的情况下,我知道来自主机的数据包从主机的networking接口转发到docker0网桥,该网桥连接到在容器内的虚拟接口eth0上结束的veth对。 但之后? 由于所有Docker容器都使用主机内核,因此假定数据包由主机内核的TCP / IP堆栈处理是正确的吗? 如果是这样,怎么样? 我真的很想阅读一个详细的解释(或者如果你知道一个资源,可以自由地链接)关于真正发生的事情。 我已经仔细阅读了这个页面,但并没有说明一切。 在此先感谢您的答复。

在具有TCPIP的多节点docker环境中进行Hazelcast

我目前正在努力解决以下问题: 我有一个Java EE应用程序,应该能够在一个集群中运行(实际上是这样)。 对于节点之间的数据交换,我使用Hazelcast 3.3.3。 由于我们的客户害怕UDP,我们使用TCP。 所以我为每个节点configuration3个hazelcast参数:使用的networking接口,端口和集群成员。 在现实生活中(不是docker环境),一切正常。 现在我想把我的Java EE服务器放入Docker容器(每个节点一个),并通过Hazelcast链接它们。 我做的是: 在运行docker容器的主机上,我创build了几个虚拟networking接口(172.21.0.X)。 对于每个docker集装箱我给了networking映射像-p 172.21.0.X:5190:5190(5190是我用于Hazelcast的端口) 在我的Java EE应用程序的容器内我configuration了hazelcast来监听接口172.21.0.X,端口5190成员172.21.0.X:5190,……现在的问题是:docker会分配一个内部的IP号码到每个钱柜。 提前我不能确定哪个IP号码docker将分配。 它最初不是我想要使用的IP(172.21.0.X)。 Hazelcast启动并告诉我:找不到匹配的界面。 当然不是。 Hazelcast会检查Docker容器的IP接口,类似于172.4.XX。 这不适合我给hazelcast的configuration(使用172.21.XX)。 到目前为止,似乎没有可能指定docker集装箱的内部IP号码。 我可以从一个正在运行的容器中查询,但是这太迟了,因为我需要在启动容器之前configuration我的Java EE服务器。 有什么提示? 是否有可能使用TCPIP运行Hazelcast?