Python 使用docker py执行shell命令
我试图在已经运行的容器上使用docker py运行shell命令,但出现错误:Python 使用docker py执行shell命令,python,docker,dockerpy,Python,Docker,Dockerpy,我试图在已经运行的容器上使用docker py运行shell命令,但出现错误: exec: "export": executable file not found in $PATH 下面是我写剧本的方式: exe = client.exec_create(container=my_container, cmd='export MYENV=1') res = client.exec_start(exec_id=exe) 因此,我的问题是如何使用docker py运行shell命令(在容器内)?
exec: "export": executable file not found in $PATH
下面是我写剧本的方式:
exe = client.exec_create(container=my_container, cmd='export MYENV=1')
res = client.exec_start(exec_id=exe)
因此,我的问题是如何使用docker py运行shell命令(在容器内)?您做得非常正确。但是您混淆了shell命令和linux可执行文件
exec\u create
和exec\u start
都是关于运行可执行文件的。比如bash<代码>导出在您的示例中是一个shell命令。您只能在容器内运行的类似shell的bash中使用它
此外,您试图实现的目标(设置环境变量)是行不通的。一旦您的exec完成(您在其中设置了env var),exec进程将完成,其环境将被拆除
只能在创建容器时创建全局容器环境变量。如果要更改环境变量,必须拆下容器并使用新的变量重新创建它。您可能知道,容器中的所有数据在删除时都会丢失,除非您使用卷存储数据。在创建容器时重新连接卷
这说明你的例子几乎是正确的。这应该可以工作并创建一个空的/somefile
exe = client.exec_create(container=my_container, cmd=['touch', '/somefile'])
res = client.exec_start(exec_id=exe)
要执行shell命令,请使用此示例。它调用sh并告诉它在给定的命令字符串(-c)上运行解释器
实际上,当在docker容器中执行cmd
docker exec
时,导出MYENV=1。它将失败并报告此错误
exec:“导出”:在$PATH中找不到可执行文件
因为导出是shell内置的,所以可以在shell中运行cmd
导出在哪里
类型导出
在/usr/bin/
或其他地方找不到导出
有一些方法可以解决这个问题
案例1:使用-c
参数
/bin/bash-c'export MYENV=1/bin/bash'
案例2:将导出cmds附加到RCF文件,然后使用此文件
echo“exprot MYENV=1”>>/bin/bash--rcfile
案例3:打开一个终端,然后输入cmds以导出环境参数,然后打开一个新终端,环境参数将起作用
/bin/bash
exprot MYENV=1
/bin/bash#打开一个新的终端
您想用它实现什么?即使它确实起作用(您可能需要使用bash-c
作为前缀),那么变量也会在子进程中导出,而不会在其他地方导出。可能使用os.environ[MYENV]=“1”
?不确定如何在容器内使用os.environ[MYENV]
export
只是一个例子,我想在容器内运行一个shell命令。最后,我需要在容器内设置一个env变量,并在容器内运行psql(然后运行一些查询)。但第一步是使用docker py在容器内运行shell命令本身。还不确定如何通过docker py和exec_create
cmd='bash-c“export MYENV=1”前缀bash-c
如果您可以控制启动容器,则可以使用docker.client.containers.run的environment
参数设置环境变量。
exe = client.exec_create(container=my_container,
cmd=['/bin/sh', '-c' 'touch /somefile && mv /somefile /bla'])
res = client.exec_start(exec_id=exe)