问题描述
我有一个带有 MysqL 数据库的 Springboot 应用程序,现在我想连接到外部 MQTT 代理。
以下是我的配置:
docker-compose.yml
version: '3.5'
networks:
foo:
name: foo
driver: bridge
services:
app-server:
build: .
container_name: Player1
ports:
- "8080:8080"
restart: always
networks:
- foo
depends_on:
- mydb
external_links:
- mosquitto:eclipse-mosquitto
environment:
- SPRING_DATASOURCE_URL=jdbc:MysqL://mydb:3306/takeaway_db?serverTimezone=UTC&useLegacyDatetimeCode=false&createDatabaseIfNotExist=true
mydb:
image: MysqL
ports:
- "3306:3306"
restart: always
networks:
- foo
environment:
- MysqL_ROOT_USER=root
- MysqL_ROOT_PASSWORD=P@ssword1234
volumes:
- /var/lib/MysqL
和Dockerfile
FROM adoptopenjdk/openjdk11:alpine-jre
ARG JAR_FILE=target/spring-boot-web.jar
workdir /opt/app
copY target/*.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
application.properties
mqtt.borker.url=tcp://172.18.0.2:1883 #container ip address from container inspect
mqtt.borker.username=username
mqtt.borker.password=password
启动 MQTT 代理的命令
docker run -it -p 1883:1883 --net foo --name mosquitto eclipse-mosquitto
当我运行 docker-compose up 时,出现以下错误:
org.eclipse.paho.client.mqttv3.MqttException: Unable to connect to server
................
at java.base/java.lang.Thread.run(UnkNown Source) ~[na:na]
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]
解决方法
基本上,这个解决方案背后的想法应该适用于将任何 docker-compose 容器与任何其他外部容器连接起来。
-
创建或添加现有容器到网络。
docker network create foo docker run -it -d -p 1883:1883 --net foo --name mosquitto eclipse-mosquitto
-
更新 docker compose 文件。
一个。将网络 foo 添加到容器中。
B.将撰写文件中的网络 foo 连接/暴露到外部网络 foo。
c.将应用容器链接到外部容器。
version: '3.5' services: app-server: build: . container_name: ... ports: - "8080:8080" restart: always networks: - foo // =========> (a) depends_on: - mydb external_links: - mosquitto:eclipse-mosquitto //============> (c) mydb: image: mysql container_name: ... ports: - "3306:3306" restart: always networks: - foo // =========> (a) networks: foo: external: name: foo // ========> (b)
可以在 here 找到完整的 docker 文件。
-
更新
application.properties
文件中的链接。spring.datasource.url=jdbc:mysql://mydb:3306/takeaway_db?createDatabaseIfNotExist=true mqtt.borker.url=tcp://mosquitto:1883