当前有一个容器在运行,在不进入容器的情况下,如何在宿主机中命令该容器在容器内执行一条命令?
宿主机: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
'''
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()
需要注意的是:
随后在宿主机上运行host.py
python /home/xxx/test/test.py
然后在容器中运行container.py
python3 /mnt/share/test/container.py
此时宿主机中的输出是:
python /home/xxx/test/test.py
hello!