如何在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/

我正在尝试在docker上运行python脚本。我尝试了不同的方法,但无法在docker上运行。我的python脚本如下所示:

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