小编Man*_*ndo的帖子

docker容器是否有自己的TCP/IP堆栈?

我正在尝试了解连接到主机并连接到Docker容器内的应用程序的网络数据包所发生的情况.

如果它是一个经典的虚拟机,我知道到达主机的数据包将由虚拟机管理程序(比如VMware,VBox等)传输到虚拟机的虚拟网卡,并从那里通过客户机操作系统的TCP/IP堆栈传输,终于达到了申请.

在Docker的情况下,我知道主机上的数据包从主机的网络接口转发到docker0网桥,该网桥连接到容器内veth虚拟接口上的一对eth0.但那之后呢?由于所有Docker容器都使用主机内核,假设数据包是由主机内核的TCP/IP堆栈处理的,这是正确的吗?如果是这样,怎么样?

我真的想阅读一个详细的解释(或者如果你知道一个资源可以随意链接它)关于真正发生的事情.我已经仔细阅读了这个页面,但它没有说明一切.

在此先感谢您的回复.

networking tcp-ip docker linux-containers

29
推荐指数
1
解决办法
7170
查看次数

是否可以在docker容器之间共享内存?

我处理具有不同进程的应用程序,并且我被要求包含这些进程以实现更多隔离.

问题是进程与单个"管理程序"进程共享内存以交换数据(它们使用经典的共享缓冲区).此解决方案是为了性能要求而实现的,因为它在用户空间中运行,因此用户空间和内核空间之间没有内容切换.

如果我没有错,则无法在单个IPC命名空间内运行多个docker容器,但我不知道单个docker容器是否可能属于不同的IPC命名空间,这可以解决我的问题.

其他解决方案是受欢迎的,请记住,性能是一项要求,提前谢谢.

docker linux-containers

27
推荐指数
3
解决办法
2万
查看次数

如何配置Docker容器可以通过container_ip:port从主机外部访问?

我有一台主机,多个IP地址分配给一个网络接口.我想配置Docker,以便让容器"响应"每个容器到分配给主机的这些IP地址的单个IP.

这可以用libcontainer完成,还是必须使用LXC驱动程序并运行我的容器--lxc-conf="lxc.network..."

提前致谢.

UPDATE

我希望每个容器都可以从外面到达; 使用默认的Docker配置,我只能暴露一个端口并通过host_ip:exposed_port而不是通过它到达容器container_ip:port.可以通过某种方式配置第二个选项吗?

networking docker linux-containers

9
推荐指数
1
解决办法
2万
查看次数

是否可以以某种方式在 Docker 容器之间或容器与主机之间使用 POSIX 信号量?

我正在尝试将多进程应用程序迁移到 Docker。不同的进程会被放置在不同的Docker容器中。

应用程序使用共享内存来交换数据并使用信号量来进行同步。我已经重新编译了 Docker,以便不使用 IPC 命名空间,并且我有效地检查了sudo ipcs -m共享内存缓冲区是否可以从不同的容器访问。

问题是信号量不起作用。我编写了这些简单的程序来检查 Docker 中 POSIX 信号量的行为:

/*  To be compiled with -lpthread */

#include <stdio.h>
#include <fcntl.h>
#include <semaphore.h>

int main(void) {

    int ret, val;
    sem_t * mySem;

    printf("[ONE] Opening the semaphore...\n");

    mySem = sem_open("sem1", O_CREAT, 0777, 0);
    if (mySem == SEM_FAILED) {
        printf("[ONE] Error on sem_open()\n");
        return -1;
    }

    ret = sem_post(mySem);

    getchar(); // Awful way to block execution of [ONE] for a while...

    printf("[ONE] Waiting for [TWO]...\n");
    ret = …
Run Code Online (Sandbox Code Playgroud)

c posix semaphore ipc docker

5
推荐指数
1
解决办法
2967
查看次数

如何刷新控制台缓冲区?

我有一些重复运行的代码:

printf(“您要继续吗?是/否:\ n”);
keepplaying = getchar();

在下一个我的代码正在运行时,它不会等待输入。我发现第二个时间的getchar使用'\ n'作为字符。我在说这是由于sdio有一些缓冲区,所以它保存了最后一个输入“ Y \ n”或“ N \ n”。

我的问题是,在使用getchar之前如何刷新缓冲区,这会使getchar等待我的回答?

c getchar

3
推荐指数
1
解决办法
2万
查看次数

在 Eclispe 验证期间出现奇怪的 WSDL 警告:“wsdl:operation 不是请求/响应或单向操作”

我正在编写一个 WSDL 文件,但无法从 Eclipse 验证器中消除此警告:

WS-I: (BP2208) wsdl:operation was not a request/response or one-way operation.
Run Code Online (Sandbox Code Playgroud)

这是我写的 WSDL 源代码:

<?xml version="1.0" encoding="UTF-8"?>

<definitions name="Master"
    targetNamespace="http://pad.polito.it/ACSAuth"
    xmlns:tns="http://pad.polito.it/ACSAuth"

    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns="http://schemas.xmlsoap.org/wsdl/">

    <types>
        <xs:schema 
        xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"
        targetNamespace="http://pad.polito.it/ACSAuth"
        xmlns:tns="http://pad.polito.it/ACSAuth">

            <xs:element name="AccessDB" type="tns:AccessDBType">
            <!-- OMITTED COMPLEX TYPE AccessDBType -->

            <xs:element name="passThrough" type="tns:passThroughType"/>
            <!-- OMITTED COMPLEX TYPE passThroughType -->

        </xs:schema>
    </types>

    <message name="updatedDB">
        <part name="db" element="tns:AccessDB"/>
    </message>

    <message name="passThroughNotice">
        <part name="info" element="tns:passThrough"/>
    </message>

    <portType name="myPorts">
        <operation name="updateManager">
            <output name="newUpdate" message="tns:updatedDB"/>
        </operation>
        <operation name="noticeManager">
            <input name="newNotice" message="tns:passThroughNotice"/>
        </operation>
    </portType> …
Run Code Online (Sandbox Code Playgroud)

java soap wsdl web-services

3
推荐指数
1
解决办法
2323
查看次数

为什么java会分配这么多进程来运行一个简单的"hello world"?

我正在运行这个非常简单的程序:

class helloWorld {
    public static void main(String[] args) throws InterruptedException {

    while(true) {
        System.out.println("Hello World!");
        Thread.sleep(1000);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么java虚拟机分配了这么多进程(它们有不同的PID),你能看到这里(htop_java_helloworld.png):

<code>Thread.sleep(1000)</code>但如果它被移除,奇怪的行为不会改变.</p>

<p><strong>UPDATE</strong></p>

<p>对不起,我忘了提一些有用的细节:</p>

<ul>
<li>该系统是Debian GNU/Linux Jessie</li>
<li>安装的JVM来自包openjdk-7-jdk</li>
<li>输出来自<code>htop</code>,我已经过滤了它,<code>\java</code>所以只列出了有用的进程</li>
</ul>

<p>我用命令编译了在问题开头编写的源代码,<code>javac helloWorld.java</code>然后用命令运行它<code>java helloWorld</code>.</p>

<p>我<em>只</em>运行<em>一个</em>程序实例,并且所有这些进程都被分配,当我杀死它时<code>ctrl+c</code>列出的所有进程都消失了,所以没有更多的程序实例同时运行.</p> </div>
        <p>
          <a href=java jvm

1
推荐指数
1
解决办法
838
查看次数

标签 统计

docker ×4

linux-containers ×3

c ×2

java ×2

networking ×2

getchar ×1

ipc ×1

jvm ×1

posix ×1

semaphore ×1

soap ×1

tcp-ip ×1

web-services ×1

wsdl ×1