我有一个 docker-compose 应用程序,如下所示:
networks:
app-network:
driver: bridge
services:
schedulermicroservicejs:
container_name: schedulermicroservicejs
hostname: schedulermicroservicejs
image: somoe-image
ports:
- "8087:8087"
build:
context: .
dockerfile: SchedulerMicroserviceJS/Dockerfile
depends_on:
- activitiesmicroservice
networks:
- app-network
cron:
build: ./SchedulerMicroserviceJS/dockerized-cron
networks:
- app-network
我想知道是否可以将 cron 作业与调度程序微服务进行通信。 cron 作业是使用 ubuntu 映像完成的:
# Pulling Ubuntu image
FROM ubuntu:20.04
# Updating packages and installing cron
RUN apt-get update && apt-get install cron -y
# Installing node js
RUN apt-get install nodejs -y && apt-get install npm -y
# Creating directory for the script
RUN mkdir /script
# Setting script directory
WORKDIR /script
# Run npm init -y to create package.json
RUN npm init -y
# Install axios package
RUN npm install axios
# Create a file called script.js
RUN echo "const axios = require('axios');" >> script.js
RUN echo "const microserviceURL = 'http://schedulermicroservicejs:8087/api/scheduler';" >> script.js
RUN echo "axios.get(microserviceURL)" >> script.js
RUN echo " .then(res => console.log('Schedule done successfully'))" >> script.js
RUN echo " .catch(e => console.error(e));" >> script.js
RUN echo "console.log('Schedule done successfully');" >> script.js
# Copying script file into the container.
COPY date-script.sh .
# Giving executable permission to the script file.
RUN chmod +x date-script.sh
# Adding crontab to the appropiate location
ADD crontab /etc/cron.d/my-cron-file
# Giving executable permission to crontab file
RUN chmod 0644 /etc/cron.d/my-cron-file
# Running crontab
RUN crontab /etc/cron.d/my-cron-file
# Creating entry point for cron
ENTRYPOINT ["cron", "-f"]
这是 crontab:
* * * * * root bash date-script.sh
这是 date-script.sh:
cd /script
#!/bin/sh
# It's Monday, so execute npm run scheduler
node script.js
由于安装了节点,因此需要加载太多内容,因此我想知道是否可以通过访问容器并在调度程序微服务中运行 npm 命令来与调度程序微服务进行通信,因为它已经在运行节点。但因为每个容器都运行自己的本地主机和虚拟机,所以我不能直接访问微服务。
这是可行的,但绝对很难,而且不是最好的方法。
据我了解,您的 cron 只向您的微服务发出
GET
请求。 curl
CLI 肯定会更轻、更容易使用,而不是运行需要 Node.js 的 Javascript 文件来完成此操作。此外,Dockerhub 上已经存在官方节点镜像,并预安装了节点。
但是为什么加载时间太长?图像的构建是的,但是一旦容器运行,只有 cron 运行,对吗?
此外,还有一些细微的改进: