Kir*_*MES 5 docker dockerfile docker-compose
我想在 MariaDB 容器中包含一个基于最新映像的 cron 任务mariadb,但我坚持这样做。
我尝试了很多方法但没有成功,因为我无法同时启动 MariaDB 和 Cron。
这是我实际的 dockerfile:
FROM mariadb:10.3
# DB settings
ENV MYSQL_DATABASE=beurre \
MYSQL_ROOT_PASSWORD=beurette
COPY ./data /docker-entrypoint-initdb.d
COPY ./keys/keys.enc home/mdb/
COPY ./config/encryption.cnf /etc/mysql/conf.d/encryption.cnf
# Installations
RUN apt-get update && apt-get -y install python cron
# Cron
RUN touch /etc/cron.d/bp-cron
RUN printf '* * * * * root echo "Hello world" >> /var/log/cron.log 2>&1\n#' >> /etc/cron.d/bp-cron
RUN touch /var/log/cron.log
RUN chmod 0644 /etc/cron.d/bp-cron
RUN cron
Run Code Online (Sandbox Code Playgroud)
通过其设置,数据库可以正确启动,但“Cron”未初始化。为了使其工作,我必须进入容器并执行“Cron”命令,一切都运行良好。
因此,我正在寻找一种从 docker-compose 中使用的 Dockerfile 启动 db 和 cron 的方法。
如果这不可能,也许还有另一种方法来完成计划的任务?目的是执行数据库的脚本。
详细阐述 @k0pernikus 的评论,我建议使用运行 cron 的单独容器。然后,该容器中的 cronjobs 就可以与您的 mysql 数据库一起使用。
我的处理方法如下:
您可以相当简单地设置 cron 容器。下面是一个可以完成这项工作的 Dockerfile 示例:
FROM alpine
COPY ./crontab /etc/crontab
RUN crontab /etc/crontab
RUN touch /var/log/cron.log
CMD crond -f
Run Code Online (Sandbox Code Playgroud)
只需将您的 crontab 放入crontab该 Dockerfile 旁边的文件中,您就应该拥有一个可用的 cron 容器。
一个 crontab 文件示例:
* * * * * mysql -h mysql --execute "INSERT INTO database.table VALUES 'v';"
Run Code Online (Sandbox Code Playgroud)
确保将 cron 容器添加到 docker-compose.yml 中,并将其放在与 mysql 服务相同的网络中:
networks:
my_network:
services:
mysql:
image: mariadb
networks:
- my_network
cron:
image: my_cron
depends_on:
- mysql
build:
context: ./path/to/my/cron-docker-folder
networks:
- my_network
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3160 次 |
| 最近记录: |