我正在尝试ssh到其中一个容器中来检查在初始构建期间创建的文件/目录 . 我试图运行 docker-compose run containername ls -la ,但是没有't do anything. Even if it did, I' d而是有一个控制台,我可以遍历目录结构,而不是运行单个命令 . 使用Docker执行此操作的正确方法是什么?
:~$ docker attach --help
Usage: docker attach [OPTIONS] CONTAINER
Attach to a running container
Options:
--detach-keys string Override the key sequence for detaching a container
--help Print usage
--no-stdin Do not attach STDIN
--sig-proxy Proxy all received signals to the process (default true)
21 回答
要连接到Windows容器中的cmd,请使用
其中 d8c25fde2769 是容器ID .
Notice :这个答案促进了我写的工具 .
我已经创建了一个容器化的SSH服务器,您可以“粘贴”任何正在运行的容器 . 这样您就可以为每个容器创建合成 . 唯一的要求是容器有Bash .
以下示例将启动连接到名为“my-container”的容器的SSH服务器 .
当您连接到此SSH服务(使用您选择的SSH客户端)时,将在名为“my-container”的容器中启动Bash会话 .
有关更多指针和文档,请参阅:https://github.com/jeroenpeeters/docker-ssh
It is simple !
列出所有Docker镜像:
在我的系统上,它显示以下输出:
我的电脑上有两个Docker镜像 . 假设我想运行第一个 .
这将使您终端控制容器 . 现在,您可以在容器内执行所有类型的shell操作 . 就像做
ls
将输出文件系统根目录中的所有文件夹 .使用:
另一种方式,虽然存在危险,但是使用
attach
,但是如果你按Ctrl C退出会话,你也将停止容器 . 如果您只是想看看发生了什么,请使用docker logs -f
.在某些情况下,您的图像可以基于阿尔卑斯山 . 在这种情况下,它将抛出:
因为
/bin/bash
不存在 . 而不是这个你应该使用:要么
要检查文件,请运行
docker run -it <image> /bin/bash
以获取交互式终端 . 图像列表可以通过docker images
获得 . 与docker exec
相反,此解决方案也适用于图像未启动(或运行后立即退出)的情况 .如果您正在寻找像我一样的Docker Compose特定答案,它提供了一种简单的方法,而无需查找生成的容器ID .
docker-compose exec
根据docker-compose.yml
文件获取服务名称 .因此,要为您的“网络”服务获取Bash shell,您可以执行以下操作:
如果您使用
Kitematic
安装了Docker,则可以使用GUI . 从Docker图标打开Kitematic
,在Kitematic
窗口中选择您的容器,然后单击exec
图标 .您也可以在此GUI中查看容器日志和许多容器信息(在设置选项卡中) .
docker exec
绝对是一个解决方案 . 处理您提出的问题的简单方法是 mounting the directory inside Docker to the local system's directory .这样您就可以立即查看本地路径中的更改 .
使用此命令:
如果容器已经退出(可能由于某些错误),您可以这样做
要么
要么
创建一个新容器并获取一个shell . 由于您指定了-rm,因此在退出shell时将删除容器 .
如果您在Windows上使用Docker并希望获得对容器的shell访问权限,请使用以下命令:
最有可能的是,您已经安装了Git Bash . If you don't, make sure to install it.
让我们说,由于您自己的原因,您确实想要使用SSH . 它需要几个步骤,但它可以完成 . 以下是您将在容器内运行以设置它的命令...
现在,您甚至可以使用X11转发到SSH客户端来运行图形应用程序(如果它们安装在容器中):
以下是一些相关资源:
openssh-server doesn't start in Docker container
How to get bash or ssh into a running container in background mode?
Can you run GUI applications in a Docker container?
用于搜索的其他有用的图形访问方法:Docker X11
If you run SSHD in your Docker containers, you're doing it wrong!
如果您使用Docker Compose,那么这将带您进入Docker容器 .
在容器内部,它将带您到Dockerfile中定义的WORKDIR . 您可以通过更改工作目录
另一种选择是使用nsenter .
就我而言,由于某些原因,我需要检查每个容器中涉及的所有网络信息 . 所以以下命令必须在容器中有效...
我查看了所有这些答案,对我无效 . 我在其他网站上搜索过信息 . 我不会在这里添加超级链接,因为它不是用英文写的 . 所以我只是为那些与我有相同要求的人提供简要解决方案 .
假设您有一个名为的运行容器光测试 . 请按照以下步骤操作 .
docker inspect light-test -f {{.NetworkSettings.SandboxKey}}
. 此命令将得到/var/run/docker/netns/xxxx
之类的回复 .然后
ln -s /var/run/docker/netns/xxxx /var/run/netns/xxxx
. 该目录可能不存在,请先执行mkdir /var/run/netns
.现在您可以执行
ip netns exec xxxx ip addr show
来探索容器中的网络世界 .PS .
xxxx
始终是通过第一个命令获得的相同值 . 当然,任何其他命令都是有效的,即ip netns exec xxxx netstat -antp|grep 8080
.docker attach
将允许您连接到您的Docker容器,但这与ssh
不是一回事 . 例如,如果容器正在运行Web服务器,docker attach
可能会将您连接到Web服务器进程的stdout . 它不一定会给你一个shell .docker exec
命令可能就是你要找的;这将允许您在现有容器中运行任意命令 . 例如:当然,您运行的任何命令都必须存在于容器文件系统中 .
在上面的命令中,
<mycontainer>
是目标容器的名称或ID . 它没有't matter whether or not you'重新使用docker compose
;只需运行docker ps
并使用ID(第一列中显示的十六进制字符串)或名称(显示在最后一列中) . 例如,给出:我可以跑:
我可以通过运行来完成同样的事情:
同样,我可以在容器中启动一个shell;
对于docker-compose up(Docker4Drupal)
我在Linux笔记本电脑上使用Docker for Drupal . 运行容器后,我使用'
docker-compose exec php bash
'连接容器,这样我就可以运行drush突击队了 . 这对我来说可以 .使用以下命令SSH到Docker容器中:
GOINSIDE SOLUTION
安装
goinside
命令行工具:并进入具有适当终端尺寸的docker容器内:
老答案
我们将此代码段放在
~/.profile
中:这不仅使每个人都能够进入一个正在运行的容器:
它也解决了长寿problem about fixed Docker container terminal sizes . 如果你面对它,这是非常烦人的 .
此外,如果您按照the link进行,您的docker容器名称也将完成命令 .
要打入正在运行的容器,请键入: