Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 从主机控制台分离容器_Docker - Fatal编程技术网

Docker 从主机控制台分离容器

Docker 从主机控制台分离容器,docker,Docker,我正在使用PythonDocker包用Ubuntu:16.04图像创建一个docker容器。我将tty作为True传递给client.containers.run()函数,detach作为True传递给client.containers.run()函数。容器以/sbin/init进程开始。容器已成功创建。但问题是,主机上的登录提示被主机控制台上的容器登录提示所取代。因此,我无法在控制台上登录计算机。SSH连接到机器工作正常 即使在将SSH连接到机器后运行python脚本时,也会发生这种情况。我尝

我正在使用PythonDocker包用Ubuntu:16.04图像创建一个docker容器。我将tty作为True传递给client.containers.run()函数,detach作为True传递给client.containers.run()函数。容器以/sbin/init进程开始。容器已成功创建。但问题是,主机上的登录提示被主机控制台上的容器登录提示所取代。因此,我无法在控制台上登录计算机。SSH连接到机器工作正常

即使在将SSH连接到机器后运行python脚本时,也会发生这种情况。我尝试了不同的选项,比如将tty设置为False,将stdout设置为False,在容器中将环境变量TERM设置为xterm,但没有任何帮助

如果有人能为这个问题提出解决方案,那就太好了

我的脚本非常简单:

import docker
client = docker.from_env()

container = client.containers.run('ubuntu:16.04', '/sbin/init', privileged=True,
       detach=True, tty=True, stdin_open=True, stdout=False, stderr=False,
       environment=['TERM=xterm'])
我没有使用任何dockerfile


我已经能够发现,当我以特权模式启动容器时,这个问题就会发生。如果这样做,/sbin/init进程将启动/sbin/agetty进程,从而将/dev/tty连接到容器。我需要找到一种启动/sbin/init的方法,这样它就不会创建/sbin/agetty进程。如果您查看链接页面,它会做很多事情——配置各种内核参数、挂载文件系统、配置网络、启动
getty
进程等等。。。。其中许多事情都需要更改主机全局设置,如果您启动了一个带有
--privileged
的容器,那么您就允许systemd这样做

关于这个命令,我给出两个关键建议:

不要在Docker中运行systemd。如果您真的需要多进程初始化系统,它很流行,但更喜欢单进程容器。如果您知道您需要一些init(8)(进程ID 1有一些职责),那么这是另一个流行的选项

不要直接运行裸露的Linux发行版映像。无论您尝试运行什么软件,它几乎肯定不会出现在
alpine
ubuntu
映像中。有你需要的软件并运行它;你应该正确设置它的
CMD
,这样你就可以
docker运行
图像而无需任何手动设置


还请记住,运行任何Docker命令都意味着对主机的根级别访问不受限制。在这里,您可以看到一个
--privileged
容器正在接管主机的控制台;它还非常容易读取和编辑主机的
/etc/shadow
/etc/sudoers
等文件。您所显示的脚本在技术上没有问题,但是您需要非常小心标准安全问题。

您能显示Dockerfile和python脚本吗?