docker容器运行python文件,设置定时任务

时间:2025-03-21 13:49:45

服务器系统:Centos 7

服务器虚拟环境:docker

本地系统:win10

1,win10安装Docker,请参考/TurboWay/p/

2,  CentOS安装Docker,请参考/u014069688/article/details/100532774

3,方法一,在本地win10中将python文件打包成镜像(需要编写Dockerfile,),上传镜像到CentOS服务器,运行镜像产生容器;

参考文章:/bocai_xiaodaidai/article/details/92838984

1)本地系统中,在python文件对应路径下将它打包成镜像,

docker save tsied:latest > ./

2)在Centos中导入镜像:

sudo docker load < ./

3)  运行镜像:

docker run tsied

4)此处有个坑,python代码中有使用MYSQL数据库,本地运行代码正常,在Centos中运行镜像:报错2003 can't connect to mysql server on

进入容器内部:docker run tsied /bin/sh,发现ping不通主机,更加ping不通外网

解决方法参照:/qq_36059826/article/details/106550332 按照文中第三种方法,修改,重启网络后,运行镜像就正常了。

  docker主机内部网络正常,与其它主机的连接失效,其它主机不能连接docker主机上映射的端口,docker内部也无法连接外部主机,利用docker info指令查看信息发现报错如下:

WARNING: IPv4 forwarding is disabled

WARNING: bridge-nf-call-iptables is disabled

WARNING: bridge-nf-call-ip6tables is disabled

使用指令vim /etc/编辑配置文件,在文件中增加以下代码:

-nf-call-ip6tables=1

-nf-call-iptables=1

-nf-call-arptables=1

net.ipv4.ip_forward=1

 

4,方法二,在CentOS服务器中拉取anaconda镜像,将python文件上传到CentOS服务器,运行镜像产生容器;

1)在CentOS服务器中拉取anaconda镜像

docker pull continuumio/anaconda3

2)运行镜像,进入交互界面,并且将容改名为anaconda

docker run -it  --name anaconda   continuumio/anaconda3 /bin/bash

3)在容器内安装需要的包

pip install xxx

4)退出交互界面   Ctrl+P+Q

5)将容器保存为新镜像

docker commit anaconda anaconda3

6)复制主机的localtime到容器,确保容器中的时间与主机一致,避免一些坑。

docker cp /etc/localtime 87986863838b:/etc/
#87986863838b是我的容器ID
#查询容器ID: docker ps -a

7)重启容器,进入正在运行的容器交互界面

docker  restart anaconda

docker exec -it anaconda /bin/bash

8)将.py文件上传到服务器上,挂载.py文件所在目录,运行产生新容器

挂载.py文件所在目录

sudo docker run -v /var/lib/docker/pyuserimage:/usr/src/python -w /usr/src/python  anaconda3 python 
  • docker run 创建容器
  • -v /var/lib/docker/pyuserimage 将主机中/var/lib/docker/pyuserimage目录挂载到容器的/usr/src/python
  • -w /usr/src/python 指定容器的/usr/src/python目录为工作目录
  • anaconda3 是镜像
  • python  是命令执行脚本

9)将容器重命名    docker rename 原容器名称 新容器名称

参考文章:/weixin_44285715/article/details/109124916

5,crontab设置定时任务,参考文章:/view/

crontab -e
#输入定时任务
* * * * * root docker restart test
#test 是容器的名字
#查看定时任务
crontab -l

如果Centos服务器的时间和本地时间不一致,定时任务可能会有问题,参考文章

/skh2015java/article/details/85007624

修改成一致的即可。