我有一个在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中的条目。
请注意,相同的IP地址可以从docker容器中ping。
答案 0 :(得分:0)
当我使用--net=host
在我的docker run命令中查看docker reference并在我的docker-compose文件中使用network_mode : "host"
时,问题已解决,请参阅compose reference。
另请参阅相关的stackoverflow post。 只有当套接字连接使用每个定义的本地套接字地址而不是让NIO选择一个空闲的本地地址时,问题才会暴露出来。
但异常堆栈跟踪说"无效的参数"对于远程地址哪种是奇怪的,这就是为什么我需要时间来弄清楚问题。