Spring Boot v1.5.13 Docker:从请求获取Docker IP而非客户端IP

时间:2018-10-25 16:04:29

标签: docker spring-boot

我有一个在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来启动该服务。

0 个答案:

没有答案
相关问题