如何在docker上运行python脚本?
我正在尝试在docker上运行python脚本。我尝试了不同的方法,但无法在docker上运行。我的python脚本如下所示:如何在docker上运行python脚本?,python,docker,dockerfile,docker-swarm,Python,Docker,Dockerfile,Docker Swarm,我正在尝试在docker上运行python脚本。我尝试了不同的方法,但无法在docker上运行。我的python脚本如下所示: import os print ('hello') 我已经在我的mac上安装了docker。但我想知道如何制作图像,然后将其推送到docker,然后我想在docker上拉脚本并运行它。您需要在脚本所在的目录中创建dockerfile 您可以使用此模板: FROM python:latest COPY scriptname.py /usr/local/share/
import os
print ('hello')
我已经在我的mac上安装了docker。但我想知道如何制作图像,然后将其推送到docker,然后我想在docker上拉脚本并运行它。您需要在脚本所在的目录中创建dockerfile 您可以使用此模板:
FROM python:latest
COPY scriptname.py /usr/local/share/
CMD ["scriptname.py", "-flag"]
然后只需执行docker build-tpulkit/scriptname:1.0.
即可创建图像
您的图像应该在docker images
下可见。如果要在本地计算机上执行,请使用docker run
如果要将其上载到DockerHub,则需要使用
docker login
登录DockerHub,然后使用docker push
上载图像。好的,首先为docker图像创建一个特定的项目目录。例如:
mkdir /home/pi/Desktop/teasr/capturing
将dockerfile和脚本复制到其中,并将当前上下文更改为此目录
cp /home/pi/Desktop/teasr/capturing.py /home/pi/Desktop/teasr/dockerfile /home/pi/Desktop/teasr/capturing/
cd /home/pi/Desktop/teasr/capturing
这是为了获得最佳实践,因为docker引擎在构建时所做的第一件事就是读取整个当前上下文
接下来,我们将查看您的dockerfile。现在应该是这样的:
FROM python:latest
WORKDIR /usr/local/bin
COPY capturing.py .
CMD ["capturing.py", "-OPTIONAL_FLAG"]
下一步你需要做的是用一个聪明的名字来构建它。使用圆点通常是不受鼓励的
docker build -t pulkit/capturing:1.0 .
下一步就是像你所做的那样运行图像
docker run -ti --name capturing pulkit/capturing:1.0
脚本现在在容器内执行,并可能在完成后退出
在找到导致以下错误的问题后编辑:
“standard_init_linux.go:195:exec用户进程导致“exec格式错误”
raspberry pi(ARM而不是x86_64)下有一个不同的体系结构,这可能是问题所在,但事实并非如此。如果这是问题所在,将父映像从armhf/python切换到就足够了
但是,错误一直在发生
因此,这个问题的解决方案是在python脚本顶部缺少一个简单的Sha-Bang。脚本中的第一行需要是#!/usr/bin/env-python
,这应该可以解决问题
在docker上运行python脚本的另一种方法是:
将本地python脚本复制到docker:
docker cp yourlocalscript.path container_id:/dst_path/
可以使用以下方法找到容器id:
docker ps
在docker上运行python脚本:
docker exec -it python /container_script_path.py
在运行UBUNTU VERSION=“14.04.6”的机器上,我遵循了@samprog(最被接受的)答案。
并且正在获取标准的_init_linux.go:195:exec用户进程导致了“exec格式错误”
上面提到的所有解决方案对我都不起作用
修复了更改Dockerfile后的错误,如下所示
来自python:最新版本
复制capturing.py./capturing.py
CMD[“python”,“capturing.py”]
注意:如果脚本导入其他模块,则需要修改Dockerfile中的COPY语句,如下所示-COPY*.py/
希望这对其他人有用。按问题标题,如果不想创建docker映像,而只想使用标准python docker映像运行脚本,可以使用下面的命令运行脚本
docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:3.7-alpine python script_to_run.py
这很简单
1-转到Python脚本目录,创建一个没有任何扩展名的文件
Dockerfile
2-现在打开docker文件并编写脚本名,而不是sci.py
(Dockerfile的内容)
保存它,现在您应该从这个dockerfile和脚本py创建图像文件
然后再运行它
3-在路径地址文件夹中写入CMD并按Enter键:
4-当cmd窗口为您打开时,键入:
docker build -t my-python-app . #this create image in docker by this title my-python-app
5-和最终运行映像:
docker run -it --rm --name my-running-app my-python-app
什么是/usr/local/share?我应该根据路径更改它吗?或者让它按原样运行?只要把它放在
PATH
变量可以到达的地方,这样你的脚本就可以执行我每次运行docker:container\u linux时都会遇到这个错误。go:295:启动容器进程导致“exec:\“capturing.py\”:在$PATH中找不到可执行文件“你把脚本放在哪里了?”?检查目录是否在PATH
变量中,或者更改CMD
指令以使用脚本的完整路径。我的docker文件和脚本位于同一目录中。我只在那个目录下运行docker。现在我得到了一个新的错误docker:来自守护进程的错误响应:oci运行时错误:container\u linux。go:295:启动容器进程导致“exec:\”/usr/local/share/capturing.py\”:权限被拒绝。非常抱歉,我必须切换目录。。。试试/usr/local/bin
好的,在dockerfile中创建一个目录,在那里你可以放置脚本,然后希望有权限执行它lol。我会在我的答案中更新dockerfile,以帮助你如何将映像构建为root?你的脚本可执行吗?如果没有,您应该使用chmod+xcapturing.py
来更改它。我认为应该是“CMD[“python”,“capturing.py”]”而不使用/,至少这对我来说是有效的。
docker run -it --rm --name my-running-app my-python-app