我有一个Springboot应用程序,我已经文档化了。我在端口8081
上公开了它,并且可以像预期的那样访问它。
http://<ipaddress>:8081
问题
docker容器中的Springboot应用程序需要连接到同一主机上的postgres数据库(而不是容器中),但它似乎没有提供对主机网络的访问权限。
到本地主机的连接:5432被拒绝
码头管理委员会:
docker run -t --rm -d -p 8081:8081 --name nexct-approval-service-container nexct-approval-service-image
所以我已经阅读过,为了连接到网络,你可以使用:
--network host
但是,它不再允许访问应用程序本身(端口8081):
WARNING: Published ports are discarded when using host network mode
问题
我如何允许访问端口8081上的SpringBoot应用程序,并允许Springboot应用程序访问主机网络,以便它能够连接到数据库?
更新
我的数据库连接在Spring中定义:
application.properties
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
@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();
}
}
发布于 2021-07-30 14:07:40
在我的服务中,我用host.docker.internal
替换了对host.docker.internal
的引用,并且能够使用-p
发布容器的端口,并在本地主机上连接到服务,而不必使用--network host
。我的服务引用一个具有主机名的.env文件,因此我创建了另一个具有更新主机名的.env文件。
发布于 2020-07-24 07:20:08
无法在网络模式主机中发布端口。
注意:如果容器在使用
IP-address
时没有自己的host mode networking
,则端口映射不会生效,而 -p、--发布、-P和--发布--所有选项都会被忽略,从而产生警告:
我如何允许访问端口8081上的SpringBoot应用程序,并允许Springboot应用程序访问主机网络,以便它能够连接到数据库?
但是,不能通过将主机网络分配到容器来到达Host
网络。要到达主机网络,您可以使用主机IP或对mac和窗口使用特殊的DNS。
host.docker.internal:DB_PORT
如果您在linux上,也可以使用主机IP。
HOST_IP:DB_PORT
或者你可以尝试(在ubuntu上工作)
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
作为主机名。
发布于 2020-07-24 07:54:57
应该将连接字符串中的:localhost
更改为:
172.17.0.1
是集装箱网络的IP地址
那就再查一遍。
https://stackoverflow.com/questions/63068636
复制相似问题