docker 部署 xxl-job、引用外部配置文件、连接宿主机 Mysql

出于学习的目的(瞎折腾)。想使用 Docker 部署一下 xxl-job。并使用外部配置文件,方便后续更新。使用宿主机已经安装好的 Mysql。

1. 拉取 xxl- job 源码

git clone https://gitee.com/xuxueli0323/xxl-job.git

2. 使用IDEA打开,打包

3. 复制 jar 包、配置文件、Dockerfile 到 xxl-job 目录下

4. 修改 Dockerfile

FROM openjdk:8-jre-slim
MAINTAINER xuxueli

ENV PARAMS=""

# 设置外部配置文件路径(必须,否则无法加载到此配置文件)
ENV JAVA_OPTS="-Dspring.config.location=/xxl-job/application.properties"

# 复制配置文件到容器中
COPY ./application.properties /xxl-job/application.properties
COPY ./logback.xml /xxl-job/logback.xml

ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ADD xxl-job-admin-*.jar /xxl-job/app.jar

ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /xxl-job/app.jar $PARAMS"]

5. 配置连接宿主机数据库

5.1 先找到宿主机IP

       主要修改数据库连接信息。宿主机在与容器同一局域网,所以需要先找到宿主机此局域网的 ip。ifconfig 命令找到 docker0 网卡信息,IP为 172.18.0.1

5.2  修改 application.properties 中的数据库连接信息

### web
server.port=8080
server.servlet.context-path=/xxl-job-admin

### actuator
management.server.servlet.context-path=/actuator
management.health.mail.enabled=false

### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/

### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########

### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://172.18.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max-lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000

### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=184248697@qq.com
spring.mail.from=184248697@qq.com
spring.mail.password=roxdezsngxuvbjii
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

### xxl-job, access token
xxl.job.accessToken=default_token

### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN

## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100

### xxl-job, log retention days
xxl.job.logretentiondays=30

6. 构建镜像

docker build -t xxl-job-admin .

7. 运行容器

docker run -d -p 8181:8080 xxl-job-admin

8. 访问

### 解决 Docker部署xxl-job 无法连接宿主机数据库的问题 在 Docker 容器中运行的应用程序通常会遇到网络配置问题,尤其是在需要访问宿主机上的资源时。以下是针对 `xxl-job` 部署过程中无法连接宿主机数据库的具体解决方案。 #### 1. 使用宿主机 IP 地址 Docker 默认情况下不会自动将容器内的请求路由到宿主机的服务上。可以通过指定宿主机的真实局域网 IP 来实现通信。假设宿主机的局域网 IP 是 `192.168.x.x`,则可以修改 `xxl-job` 的配置文件如下: ```properties xxl.job.admin.addresses=http://<宿主机IP>:8080/xxl-job-admin xxl.job.executor.ip=<宿主机IP> xxl.job.executor.address=http://<宿主机IP>:9999/executor ``` 其中 `<宿主机IP>` 应替换为实际的宿主机局域网地址[^1]。 #### 2. 利用特殊关键字 `host.docker.internal` 对于某些支持该功能的 Docker 版本(如 Docker Desktop for Mac 和 Windows),可以直接通过 `host.docker.internal` 访问宿主机。这种方式无需手动获取宿主机的实际 IP 地址,简化了配置过程。具体设置如下: ```properties xxl.job.admin.addresses=http://host.docker.internal:8080/xxl-job-admin xxl.job.executor.ip=host.docker.internal xxl.job.executor.address=http://host.docker.internal:9999/executor ``` 需要注意的是,此方法仅适用于特定平台,并可能因版本差异而不可用。 #### 3. 修改 MySQL 数据库监听范围 默认情况下,MySQL 只允许本地回环接口 (`localhost`) 上的连接。为了使外部容器能够访问宿主机上的 MySQL 实例,需调整其绑定地址为 `0.0.0.0` 或者具体的外网网卡地址。编辑 MySQL 配置文件 `/etc/mysql/my.cnf` 并找到以下部分: ```ini bind-address = 0.0.0.0 ``` 保存更改并重启 MySQL 服务以生效。随后,在 `xxl-job` 的配置文件中填写正确的宿主机 IP 即可完成连接[^2]。 #### 4. 设置防火墙规则 确认宿主机的操作系统防火墙已开放必要的端口供 Docker 容器访问。例如,如果 MySQL 运行于标准端口 `3306`,应确保该端口对外部可用。Linux 下可通过命令检查和管理防火墙状态: ```bash sudo ufw status verbose sudo ufw allow 3306/tcp ``` Windows 用户可以根据实际情况调整内置防火墙策略[^3]。 --- ### 示例代码片段 下面是一个完整的 `application.properties` 文件模板用于配置 `xxl-job`: ```properties # Admin 地址 xxl.job.admin.addresses=http://<宿主机IP>:8080/xxl-job-admin # Executor 地址 xxl.job.executor.appname=xxl-job-executor-sample xxl.job.executor.ip=<宿主机IP> # 替换为 host.docker.internal 或真实 IP xxl.job.executor.port=9999 # 自定义端口号 xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler # 日志路径 xxl.job.executor.logretentiondays=30 # 日志保留天数 # 数据源配置 (指向宿主机上的 MySQL) spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://<宿主机IP>:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=password ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值