基于Debian镜像的Docker,crontab无法正常运行的配置笔记

最近弄了一天基于Debian的docker,耗费了大量时间调试crontab,一直无法运行,多次查询debian官方文档和stack overflow终于找到解决方案,现将弯路记录如下。

 

和之前alpine和centOS的docker不同,debian使用另一种cron机制,其中要点如下:

1. docker的container环境变量无法带入cron,也不能使用alpine的. /etc/profile进行手工加载,需要使用cat命令进行链接。

2. cron脚本中,相对路径经常出现not found的情况,cron脚本中运行的.sh脚本也一样,具体原因未查明,但是使用绝对路径,即可以。

3. 直接将文件拷贝到/etc/cron.d下面即可,无需再像alpine一样cat到/var/spool/crontab/root下运行。

 

简要记录遇到问题:

1. cron文件读取异常,使用rsyslog查看cron系统日志,发现是每行结尾多了^M字符,使用dos2unix工具重新转换,解决。

2. 命令不存在 command not found,将路径修改为绝对路径,修改如下。

sh /usr/local/bin/send_mail.sh >> /build/logs/cron_stat.log 2>&1
/bin/bash /usr/local/bin/send_mail.sh >> /build/logs/cron_stat.log 2>&1

其中/usr/local/bin/send_mail.sh脚本修改

#!/bin/sh
/usr/local/bin/python /build/monitor_punish.py
#!/bin/bash
cd /build
/usr/local/bin/python monitor_punish.py

3. 修改完毕后python可以运行了,但是报环境变量不存在,但是export和env都有内容,需要提前把内容cat到一个文件中,运行程序时再读文件。

相关文章http://dev.im-bot.com/docker-cron/

Dockerfile修改以下代码:

CMD env > /root/env.txt && cron && python server.py

cron文件修改如下:

*/1 * * * * root env - `cat /root/env.txt` /bin/bash /usr/local/bin/intel_ir_send_punish_mail.sh >> /build/logs/cron_stat.log 2>&1

至此,文件不存在,命令不存在,环境变量不存在,均解决。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Docker 内网穿透配置教程 (基于 Debian) 1. 安装 Docker:在 Debian 系统中安装 Docker 的方法请参考官方文档。 2. 安装 Nginx:在终端中输入以下命令安装 Nginx: ``` sudo apt-get update sudo apt-get install nginx ``` 3. 创建 Docker 容器:使用以下命令创建一个运行在端口 8080 上的 Docker 容器: ``` sudo docker run -p 8080:80 -d nginx ``` 4. 配置 Nginx:编辑 Nginx 配置文件(/etc/nginx/sites-available/default),添加以下内容: ``` server { listen 80; server_name 你的域名; location / { proxy_pass http://你的内网 IP:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 5. 重启 Nginx:使用以下命令重启 Nginx: ``` sudo service nginx restart ``` 6. 配置防火墙:如果你的机器上安装了防火墙,请在防火墙中添加规则,允许对外访问端口 80。 7. 配置完成:这样你就可以通过域名访问你的内网机器了。 ### 回答2: 基于DebianDocker内网穿透配置教程如下: 1. 准备工作: - 安装Docker:使用apt-get命令安装Docker。 - 安装Docker Compose:使用pip命令安装Docker Compose。 2. 创建Dockerfile: - 在本地创建一个目录,用于存放配置文件和Dockerfile。 - 在该目录下创建一个Dockerfile,并添加以下内容: ``` FROM debian:latest ENV LC_ALL C.UTF-8 RUN apt-get update && apt-get install -y socat COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] ``` 3. 创建entrypoint.sh脚本: - 在同一目录下创建一个entrypoint.sh文件,并添加以下内容: ``` #!/bin/bash socat tcp-listen:<本地端口号>,fork tcp:<目标IP地址>:<目标端口号> ``` 4. 构建Docker镜像: - 执行以下命令来构建Docker镜像: ``` docker build -t tunnel . ``` 5. 启动Docker容器: - 执行以下命令来启动Docker容器,并将本地端口映射到容器内部的端口: ``` docker run -d -p <本地端口号>:<容器内部端口号> tunnel ``` 6. 进行内网穿透测试: - 在本地访问`localhost:<本地端口号>`,将会使用内网穿透将请求转发到目标IP地址的目标端口号。 通过上述步骤,你可以配置基于DebianDocker内网穿透。请确保替换相关的占位符,如本地端口号、目标IP地址和端口号,以满足你的实际需求。 ### 回答3: 基于DebianDocker内网穿透配置教程如下: 1. 首先,确保你的Debian系统已经安装了Docker。可以通过运行以下命令进行检查: ``` docker --version ``` 2. 安装并配置代理服务器。我们使用Nginx作为代理服务器。运行以下命令进行安装: ``` sudo apt-get update sudo apt-get install nginx ``` 3. 修改Nginx的配置文件。打开Nginx的默认配置文件: ``` sudo nano /etc/nginx/sites-available/default ``` 4. 在配置文件的server节中添加以下内容,用于指定端口转发: ``` location / { proxy_pass http://localhost:8000; // 将8000端口替换成你实际使用的端口 } ``` 5. 保存配置文件并重启Nginx服务: ``` sudo service nginx restart ``` 6. 运行你的Docker容器,并暴露你想要的端口。假设你要将容器的80端口映射到主机的8000端口,你可以使用以下命令运行容器: ``` docker run -p 8000:80 <image> ``` 其中,`<image>`是你要运行Docker镜像。 7. 现在,你的Docker容器的端口已经映射到了主机的8000端口。由于配置了Nginx代理服务器,因此你可以使用主机的IP地址和8000端口来访问Docker容器。 总结: 通过以上步骤,你可以在Debian系统上配置Docker内网穿透。通过Nginx代理服务器,你可以将Docker容器的端口映射到主机的指定端口,从而可以通过主机的IP地址和指定端口来访问Docker容器。这样,你就可以在内网环境中方便地访问Docker容器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值