发布信息

docker docker 和 attach的区别 exec (docker nas)

     2024-10-22 13:26:07     358

本文目录导航:

docker exec 和 docker attach的区别

Docker exec与Docker attach不论是开发者是运维人员,都经常有须要进入容器的诉求。

目前看,重要的方法不外乎以下几种: 1. 经常使用ssh登陆进容器 2. 经常使用nsenter、nsinit等第三方工具 3. 经常使用docker自身提供的工具方法1须要在容器中启动sshd,存在开支和攻打面增大的疑问。

同时也违犯了Docker所提倡 的一个容器一个进程的准则。

方法2须要额外学习经常使用第三方工具。

所以大少数状况最好还是经常使用Docker原生方法,Docker目前重要提供了Docker exec和 Docker attach两个命令。

以下在fedora21,docker1.7上验证。

Docker attachDocker attach可以attach到一个曾经运转的容器的stdin,而后启动命令口头的举措。

但是须要留意的是,假设从这个stdin中exit,会造成容器的中止。

[root@localhost temp]# docker psConTAINER IDIMAGE COMMAND CREATEDSTATUSPORTS NAMES2327e7eab0edbusybox:buildroot-2014.02 /bin/sh about a minute ago Up about a minute bb2[root@localhost temp]# docker attach bb2/ # lsbindevetchome liblib64linuxrcmediamntoptproc root runsbin systmpusrvar/ # pwd// #Docker exec对于-i、-t参数可以看出只用-i时,由于没有调配伪终端,看起来像pipe口头一样。

但是口头结果、命令 前往值都可以正确失掉。

[root@localhost temp]# docker exec -i bb2 /bin/shdateTue Jul 14 04:01:11 UTC 2015echo $?0dir/bin/sh: dir: not foundecho $?127经常使用-it时,则和咱们平时操作console界面相似。

而且也不会像attach模式由于分开,造成 整个容器分开。

这种模式可以代替ssh或许nsenter、nsinit模式,在容器内启动操作。

[root@localhost temp]# docker exec -it bb2 /bin/sh/ # pwd// # echo $?0/ # dir/bin/sh: dir: not found/ # echo $?127假设只经常使用-t参数,则可以看到一个console窗口,但是口头命令会发现由于没有取得stdin 的输入,不可看到命令口头状况。

[root@localhost temp]# docker exec -t bb2 /bin/sh/ # pwdhanging....[root@localhost temp]# docker exec -t bb2 pwd/[root@localhost temp]# echo $?0[root@localhost temp]# docker exec -t bb2 dir2015/07/14 04:03:57 docker-exec: failed to exec: exec: dir: executable file not found in $PATH[root@localhost temp]# echo $?0docker exec口头后,会命令口头前往值。

(备注Docker1.3仿佛有Bug,不能正确前往命令口头结果)[root@localhost temp]# docker exec -it bb cat / running 10[root@localhost temp]# docker exec -t bb / [root@localhost temp]# echo $?10[root@localhost temp]# docker exec -it bb / [root@localhost temp]# echo $?10[root@localhost temp]# docker exec -i bb / [root@localhost temp]# echo $?10对于-d参数在后盾口头一个进程。

可以看出,假设一个命令须要长期间进程,经常使用-d参数会很快前往。

程序在后盾运转。

[root@localhost temp]# docker exec -d bb2 /[root@localhost temp]# echo $?0假设不经常使用-d参数,由于命令须要长期间口头,docker exec会卡住,不时等命令口头实现 才前往。

[root@localhost temp]# docker execbb2 /^C[root@localhost temp]#[root@localhost temp]#[root@localhost temp]# docker exec -itbb2 /^C[root@localhost temp]#[root@localhost temp]# docker exec -ibb2 /^C[root@localhost temp]# docker exec -tbb2 /^C[root@localhost temp]#

如何进入docker容器

如何进入docker容器

要进入Docker容器,可以经常使用`docker exec`命令或许经过容器外部网络经常使用SSH衔接。

经常使用docker exec命令进入容器

1. 首先,确保你知道要进入的容器的称号或ID。

2. 经常使用以下命令格局进入容器:

docker exec -it <容器称号或ID> /bin/bash

这里的`-it`参数是交互式的意思,使你能够和容器内的bash shell启动交互。

`/bin/bash`是要在容器内启动的shell程序。

口头此命令后,你将间接进入容器的命令行界面。

经常使用SSH衔接进入容器

假设你的容器性能了SSH服务,还可以经过SSH衔接到容器外部。步骤如下:

1. 确保你的Docker容器在创立时曾经装置了SSH服务,并且开启了SSH端口映射。

例如,在Docker启动命令中可以添加`-p 22:22`来映射容器的SSH端口到服务器的22端口。

2. 经常使用SSH客户端衔接到容器:

ssh 用户名@服务器IP地址 -p 映射的端口号

例如,假设容器的IP是`172.17.0.2`并且你在容器中创立了用户名为`user`的用户,那么你可以经常使用以下命令衔接:

ssh user@172.17.0.2 -p 映射的端口号

输入正确的明码后,就可以经过SSH进入容器外部了。

但是,此方法理论须要额外性能容器中的SSH服务,并且须要保障容器的安保性失掉妥善解决。

因此,理论介绍经常使用第一种方法来进入容器。

假设是开发测试环境且信赖特定的网络,可以按需性能和经常使用SSH衔接方法。

不过,在消费环境中经常使用时务必审慎解决安保疑问。

docker中的exec和attach命令的区别?

在Docker环境中,exec和attach命令的重要区别在于它们如何与容器交互。

当经常使用docker attach时,用户只能与一个shell实例互动。

若要启动容器中的新终端窗口,须要经常使用docker exec。

这象征着attach提供了间接访问容器终端的方便模式,而exec则用于在运转的容器上启动新的进程。 nas

假设Docker容器在启动时经常使用/bin/bash,attach命令就能间接访问容器外部的bash环境。

但是,假设容器经常使用了不同的启动命令,attach将不可间接进入容器外部。

此时,须要经过exec命令在容器外部创立bash实例。

attach的重要性能是附着到已运转的容器,而不会在容器中创立新的进程口头额外的命令。

它仅提供了一个间接与容器外部环境启动交互的通道。

相比之下,exec命令不只准许在容器上创立新进程,而且口头用户指定的命令,这使得它成为在容器中口头特定义务的弱小工具。

相关内容 查看全部