Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在主机模式下运行容器后清空IP地址_Java_Docker - Fatal编程技术网

Java 在主机模式下运行容器后清空IP地址

Java 在主机模式下运行容器后清空IP地址,java,docker,Java,Docker,我想使用java库创建主机模式为的docker容器 在我的容器中存在我的应用程序,该应用程序在运行后应打开从容器到下一个容器的端口20202。所以我的代码是 Map<String, List<PortBinding>> portBindings = Maps.newHashMap(); portBindings.put("20202", Lists.newArrayList(PortBinding.of("localhost", "20202")));

我想使用java库创建主机模式为的docker容器

在我的容器中存在我的应用程序,该应用程序在运行后应打开从容器到下一个容器的端口
20202
。所以我的代码是

Map<String, List<PortBinding>> portBindings = Maps.newHashMap();
portBindings.put("20202", Lists.newArrayList(PortBinding.of("localhost", "20202")));
        HostConfig hostConfig = HostConfig.builder()
        .networkMode("host")
        .portBindings(portBindings)
        .build();
ContainerConfig config = ContainerConfig.builder()
        .hostConfig(hostConfig)
        .image("myImage")
        .exposedPorts("20202")
        .cmd("myProg", "arg1", "arg2"))
        .build();
DefaultDockerClient.fromEnv().build();
client.pull(config.image());
ContainerCreation creation = client.createContainer(config);
client.startContainer(creation.id());
ContainerInfo info = client.inspectContainer(creation.id());
所以问题是,当我在
HostConfig
中设置主机模式时,如何将有关
localhost
127.0.0.1
的信息放入
ContainerInfo

为什么这不是自动发生的?

当您使用主机模式时,端口绑定将被忽略,因为您的代码负责选择端口并绑定到它。Docker正在为您的主机网络打补丁。因此,无论您是否通过端口映射,它都不会在主机模式下使用

此外,当您运行容器is NetworkMode时,不会将IP分配给容器本身。您需要使用主机IP

$ docker run -d --network host alpine sleep 900
804006d7f917637ee615d877558da7fae5b01a03af713c773098d0ef563d06c2

$ docker inspect 804006d7f917637ee615d877558da7fae5b01a03af713c773098d0ef563d06c2 | grep IPA
  "SecondaryIPAddresses": null,
  "IPAddress": "",
  "IPAMConfig": null,
  "IPAddress": "",

从上面可以看出,容器在主机模式下永远不会获得ip,所以唯一的方法是在我的代码
localhost
127.0.0.1
中手动设置?例如,使用
if(config.networkMode().equal(“host”){host=“127.0.0.1”;}
?是的,这就是你如何在容器中以主机模式运行的代码。我通常更喜欢通过环境变量配置这些东西
$ docker run -d --network host alpine sleep 900
804006d7f917637ee615d877558da7fae5b01a03af713c773098d0ef563d06c2

$ docker inspect 804006d7f917637ee615d877558da7fae5b01a03af713c773098d0ef563d06c2 | grep IPA
  "SecondaryIPAddresses": null,
  "IPAddress": "",
  "IPAMConfig": null,
  "IPAddress": "",