【问题标题】:getting java.net.SocketException: Invalid argument:inside docker container获取 java.net.SocketException:无效参数:在 docker 容器内
【发布时间】:2016-05-17 13:13:03
【问题描述】:

我有一个在 docker 容器中运行的 java 程序。 该程序尝试连接到 IPv4 套接字。 我得到以下无效参数异常

Caused by: java.net.SocketException: Invalid argument: /135.250.15.104:6524
    at sun.nio.ch.Net.connect0(Native Method)
    at sun.nio.ch.Net.connect(Net.java:454)
    at sun.nio.ch.Net.connect(Net.java:446)
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:648)
    at io.netty.channel.socket.nio.NioSocketChannel.doConnect(NioSocketChannel.java:209)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.connect(AbstractNioChannel.java:199)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.connect(DefaultChannelPipeline.java:1089)
    at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:543)
    at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:528)
    at io.netty.handler.ssl.SslHandler.connect(SslHandler.java:415)
    at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:543)
    at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:528)
    at io.netty.channel.ChannelOutboundHandlerAdapter.connect(ChannelOutboundHandlerAdapter.java:47)
    at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:543)
    at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:528)
    at io.netty.channel.DefaultChannelPipeline.connect(DefaultChannelPipeline.java:914)
    at io.netty.channel.AbstractChannel.connect(AbstractChannel.java:208)
    at io.netty.bootstrap.Bootstrap$2.run(Bootstrap.java:167)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:357)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)

现在我尝试设置-Djava.net.preferIPv4Stack=true JVM 选项,但没有成功。

我使用的是 open-jdk 8,from java:openjdk-8u72-jre 是我的 DockerFile 中的条目。 请注意,可以从 docker 容器 ping 相同的 IP 地址。

【问题讨论】:

    标签: java docker nio dockerfile openjdk


    【解决方案1】:

    当我在我的 docker run 命令中使用 --net=host 请参阅 docker reference 并在我的 docker-compose 文件中使用 network_mode : "host" 请参阅 compose reference 时,问题已解决。

    另请参阅相关的stackoverflow post。 只有当套接字连接使用自定义的本地套接字地址而不是让 NIO 选择一个空闲的本地地址时,问题似乎才会暴露出来。

    但是异常堆栈跟踪显示远程地址的“无效参数”很奇怪,这就是为什么我需要时间来找出问题所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 2016-08-30
      相关资源
      最近更新 更多