docker-宿主机与容器的命令执行方法
2024-01-09 18:48:05
在宿主机中命令运行状态的容器执行一条命令
问题描述
当前有一个容器在运行,在不进入容器的情况下,如何在宿主机中命令该容器在容器内执行一条命令?
环境
宿主机:centos7,python2.7,
容器:ubuntu20,python3.8
解法
假设有一个test.py,内容是:
print "hello!"
需要实现的效果是在宿主机中,使用python3运行test.py。(会报错,但是仅作测试、示意)
首先将test.py放在/home/xxx/test,并且在容器中建立一个文件夹/mnt/share/test作为可共享的文件夹。
然后启动容器:
docker run -itd --privileged -v /home/xxx/test:/mnt/share/test ubuntu-py385:2023
复制容器id备用。
此时在宿主机中只需要执行docker exec即可看到结果。
(base) [root@localhost test]# docker exec 容器ID python3 /mnt/share/test/test.py
File "/mnt/share/test/test.py", line 1
print "hello!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("hello!")?
在运行的容器中命令宿主机执行一条命令
问题描述
当前有一个容器在运行,如何在容器中向宿主机发送一条命令,要求宿主机执行?
环境
同上。
解法
test.py存放位置同上,内容同上,容器启动方法同上。
这里使用socket解决这个问题。
准备两个python文件:
- host.py 在宿主机中执行
- container.py 在容器中执行
'''host.py
'''
import os
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 8890))
server.listen(5)
while True:
client_socket, address = server.accept()
data = client_socket.recv(1024)
cmd = data.decode('utf-8')
if len(cmd) == 0: continue
print cmd
os.system(cmd)
client_socket.close()
#---------------------------------------------------------
'''container.py
'''
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('宿主机ip', 8890))
client.sendall(b'python /home/xxx/test/test.py')
client.close()
需要注意的是:
- container的connect函数要换成宿主机ip;
- container发出的命令中用到的路径,需要使用宿主机的(因为这个命令要在宿主机中执行);
- 需要确保宿主机的8890端口已经开启。
随后在宿主机上运行host.py
python /home/xxx/test/test.py
然后在容器中运行container.py
python3 /mnt/share/test/container.py
此时宿主机中的输出是:
python /home/xxx/test/test.py
hello!
文章来源:https://blog.csdn.net/pxy7896/article/details/135482540
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!