我有一个在docker容器中运行的spring boot服务。我正在使用HttpServletRequest从传入的客户端请求中获取远程IP地址。这可以在本地按预期工作,但是一旦服务在Docker容器中运行,获取的IP地址就是Docker容器IP,而不是客户端IP。有没有办法解决这个问题并获得实际的客户端IP?任何帮助将不胜感激。
更多编程细节:
<div id="contentBox" >
<!-- criação do action para submit -->
<portlet:actionURL name="dataSubmit" var="dataSubmit" />
<form action="<%=dataSubmit %>" method="Post">
<div class="modal-content">
<!-- div do header -->
<div class="modal-header">
<img src="<%=request.getContextPath() %>/img/logo.jpg">
</div>
<!-- div do body -->
<div class="modal-body">
My info here...
<p>
<!-- criação dos botões de nota -->
<div id="myRadiogroup" class="radioClass">
<input id="nota1" type="button" value="1" onclick="radioFunction(1)" class="nota1" >
<input id="nota2" type="button" value="2" onclick="radioFunction(2)" class="nota2">
<input id="nota3" type="button" value="3" onclick="radioFunction(3)" class="nota3">
<input id="nota4" type="button" value="4" onclick="radioFunction(4)" class="nota4">
<input id="nota5" type="button" value="5" onclick="radioFunction(5)" class="nota5">
<input id="nota6" type="button" value="6" onclick="radioFunction(6)" class="nota6">
<input id="nota7" type="button" value="7" onclick="radioFunction(7)" class="nota7">
<input id="nota8" type="button" value="8" onclick="radioFunction(8)" class="nota8">
<input id="nota9" type="button" value="9" onclick="radioFunction(9)" class="nota9">
<input id="nota10" type="button" value="10" onclick="radioFunction(10)" class="nota10">
</div>
</p>
<!-- input que recebe o valor da nota via javascript -->
<input type='hidden' id= 'hiddenField' name='<portlet:namespace/>nota' value='' />
<div class="form-group">
<label for="comment">Commentário (opcional)</label>
<textarea rows="3" cols="50" id="comment" name="<portlet:namespace/>comment"></textarea>
</div>
</div>
<!-- div do rodapé -->
<div class="modal-footer">
<span id="closer" class="closeBtnFooter">Não quero dar feedback </span>
<input id="enviar" type="Submit" class="btn btn-primary" value="Enviar feedback">
</div>
</div>
</form>
</div>
上面是“ bar”的GET请求示例。使用HttpServletRequest可以获取发出请求的机器的远程地址。在本地运行此代码(在未经过dockerized的本地计算机上),上述方法完美运行。该服务获得了客户端IP,我可以验证该IP是否正确。在Docker中托管相同的服务,调用getRemoteAddr()将为容器提供默认网关IP。我希望进一步的解释可以使我更加清楚地了解要完成的工作。与往常一样,我们将不胜感激任何帮助。
更新: 只需澄清一些小窍门,Spring Boot(v1.5.13)服务就可以在Docker主机上运行(Docker版本18.06.1-ce,内部版本为e68fc7a)。我在本地运行的意思是在开发过程中在本地计算机上启动服务时。我将所有Java开发工作都使用Intellij的最新版本。可以使用我的开发计算机上的Intellij来启动该服务。