首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >码头警告:使用主机网络模式时,已发布的端口将被丢弃。

码头警告:使用主机网络模式时,已发布的端口将被丢弃。
EN

Stack Overflow用户
提问于 2020-07-24 07:14:06
回答 3查看 27.3K关注 0票数 16

我有一个Springboot应用程序,我已经文档化了。我在端口8081上公开了它,并且可以像预期的那样访问它。

代码语言:javascript
运行
复制
http://<ipaddress>:8081

问题

docker容器中的Springboot应用程序需要连接到同一主机上的postgres数据库(而不是容器中),但它似乎没有提供对主机网络的访问权限。

到本地主机的连接:5432被拒绝

码头管理委员会:

代码语言:javascript
运行
复制
docker run -t --rm -d -p 8081:8081 --name nexct-approval-service-container nexct-approval-service-image

所以我已经阅读过,为了连接到网络,你可以使用:

代码语言:javascript
运行
复制
--network host 

但是,它不再允许访问应用程序本身(端口8081):

代码语言:javascript
运行
复制
WARNING: Published ports are discarded when using host network mode

问题

我如何允许访问端口8081上的SpringBoot应用程序,并允许Springboot应用程序访问主机网络,以便它能够连接到数据库?

更新

我的数据库连接在Spring中定义:

application.properties

代码语言:javascript
运行
复制
spring.datasource1.driver-class-name=org.postgresql.Driver
spring.datasource1.jdbc-url=jdbc:postgresql://localhost:5432/pims
spring.datasource1.username=postgres
spring.datasource1.password=

MultipleDBConfig.java

代码语言:javascript
运行
复制
@Configuration
@ComponentScan(basePackages = "com.nexct")
public class MultipleDBConfig {

    @Bean(name = "datasource1")
    @ConfigurationProperties("spring.datasource1")
    @Primary
    public DataSource dataSource1(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "datasource2")
    @ConfigurationProperties("spring.datasource2")
    public DataSource dataSource2(){
        return DataSourceBuilder.create().build();
    }
}
EN

回答 3

Stack Overflow用户

发布于 2021-07-30 14:07:40

在我的服务中,我用host.docker.internal替换了对host.docker.internal的引用,并且能够使用-p发布容器的端口,并在本地主机上连接到服务,而不必使用--network host。我的服务引用一个具有主机名的.env文件,因此我创建了另一个具有更新主机名的.env文件。

票数 10
EN

Stack Overflow用户

发布于 2020-07-24 07:20:08

无法在网络模式主机中发布端口。

注意:如果容器在使用IP-address时没有自己的host mode networking,则端口映射不会生效,而 -p、--发布、-P和--发布--所有选项都会被忽略,从而产生警告:

主机联网

我如何允许访问端口8081上的SpringBoot应用程序,并允许Springboot应用程序访问主机网络,以便它能够连接到数据库?

但是,不能通过将主机网络分配到容器来到达Host网络。要到达主机网络,您可以使用主机IP或对mac和窗口使用特殊的DNS。

代码语言:javascript
运行
复制
host.docker.internal:DB_PORT

如果您在linux上,也可以使用主机IP。

代码语言:javascript
运行
复制
HOST_IP:DB_PORT

或者你可以尝试(在ubuntu上工作)

代码语言:javascript
运行
复制
docker run -it --rm -e HOST_IP=$(ip -o route get to 8.8.8.8 | sed -n 's/.*src \([0-9.]\+\).*/\1/p') image_name

现在,在应用程序中使用HOST_IP作为主机名。

票数 8
EN

Stack Overflow用户

发布于 2020-07-24 07:54:57

应该将连接字符串中的:localhost更改为:

172.17.0.1是集装箱网络的IP地址

那就再查一遍。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63068636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档