如何将Spring Boot应用程序容器与MongoDB容器链接?
Spring Boot应用程序正在使用MongoDBRespository,它默认连接到localhost:27017。
答案 0 :(得分:2)
您应该使用container linking。来自docs:
设置链接时,可以在源容器和收件人容器之间创建管道。然后,收件人可以访问有关源
的选择数据当链接两个容器时,Docker将在目标容器中设置一些环境变量,以便能够以编程方式发现与源容器相关的信息。
基本上这意味着以下
EXPOSE
条目或通过-p
选项docker run
)。--link
选项启动Spring Boot容器。MongoDBRepository
应配置为使用链接在环境变量中提供的地址。有关详细信息,请查看how to link containers上的这篇文章。
答案 1 :(得分:2)
@Himanshu Yadav,你可以尝试这个资源。它确实解决了我的问题。 :-)在这方面有一个完整的教程
https://www.jiwhiz.com/blogs/Spring_Boot_Docker_MySQL_Demo
引用
docker run -p 8080:8080 --name demo-app --link demo-mysql:mysql -d jiwhiz/spring-boot-docker-mysql
答案 2 :(得分:1)
我想知道你是否通过链接容器来实现这一点,它对我不起作用,尝试在我的Springboot应用程序中使用链接容器别名作为dbhost名称。我没有尝试MongoClientURI
。
我确实选择了使用mongodb容器和spring应用程序容器的工作,我必须设置mongo容器主机和端口以弹出应用程序容器,同时将应用程序容器创建为Containers ENV变量,如下所示
Mongo容器
docker run -d -p 27027:27017 -p 28027:28017 --name mongodb --volumes-from dbdata iamiddy/mongodb
SpringBoot Apps容器
docker run -d -p 8000:8080 --name AppDockerContainer
-e db.host.name=EC2-HOSTING-MONGO-CONTAINER
-e db.host.port=DB-HOST-PORT AppDockerImage
application.properties
db.host.port=27017
db.host.name=localhost
MongoConfig
public class MongoRepositoryConfig extends AbstractMongoConfiguration {
@Value("${db.host.port}")
private int port;
@Value("${db.host.name}")
private String host;
@Value("${db.name}")
private String dbname;
@Override
public Mongo mongo() throws Exception {
ServerAddress serverAdress = new ServerAddress(host,port);
Mongo mongo = new MongoClient(serverAdress);
mongo.setWriteConcern(WriteConcern.ACKNOWLEDGED);
return mongo;
}
public @Bean MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongo(), getDatabaseName());
}
@Override
protected String getDatabaseName() {
return dbname;
}
}
答案 3 :(得分:1)
由于docker links现已弃用,可以使用用户定义的网络实现容器之间的通信。
参考Docker Networking,docker有3种不同类型的网络 - 网桥,主机,网络。使用docker network ls
,您可以列出当前定义的所有网络。默认情况下,对于预先配置的每种类型,docker附带1。
在运行容器时,可以指定进程将加入的网络(--network=abcd
) - 默认情况下,它是bridge类型的docker0。
现在,对于问题中的问题陈述,最简单的方法是在启动mongo& amp; spring-boot-app容器。
docker run -d -P --name=my-mongo --network=host mongo:latest
然后在你的Spring启动应用程序中,你会得到这样的东西: -
spring:
application:
name: my-app
data:
mongodb:
database: app
host: 192.168.99.100 // your machine private ip.
port: 27017
使用以下方法从图像运行spring boot应用程序: -
docker run -d -P --name=my-boot-app --network=host my-app-image
然后你可以使用/到达mongo&应用程序实例就好像它们没有使用docker一样运行。 (在Windows上使用docker-toolbox时,你实际上在具有不同IP的VM中运行docker - 我发现它是192.168.99.100。所以记得使用这个ip而不是你的本地ip)