我如何进入Docker容器的外壳?
我已经开始使用Docker了。我正在使用WordPress的基础镜像和docker-compose。
我正试图通过ssh进入其中一个容器来检查在初始构建过程中创建的文件/目录。我试着运行docker-compose run containername ls -la
,但是没有任何作用。即使它做了,我也希望有一个控制台,可以遍历目录结构,而不是运行一条命令。用Docker做这件事的正确方法是什么?
979
20
docker attach
将让你连接到你的Docker容器,但这与ssh
不是一回事。 例如,如果你的容器正在运行一个网络服务器,docker attach
可能会将你连接到网络服务器进程的stdout。 它不一定会给你一个shell。docker exec
命令可能是你正在寻找的;这将让你在现有的容器中运行任意的命令。 比如说。当然,无论你运行什么命令,都必须存在于容器的文件系统中。
在上面的命令中,`
是目标容器的名称或ID。 你是否使用
docker compose并不重要;只要运行
docker ps`并使用ID(显示在第一列的十六进制字符串)或名称(显示在最后一列)。 例如,给定。我可以运行。
我可以通过运行来完成同样的事情。
同样地,我可以在容器中启动一个shell。
要在运行中的容器中进行bash,请输入以下内容。
比方说,由于你自己的原因,你真的想使用SSH。 这需要一些步骤,但它可以做到。 以下是在容器内运行的设置命令......
现在你甚至可以使用X11转发到SSH客户端来运行图形应用程序(如果它们安装在容器中)。
以下是一些相关资源。
注意。 这个答案推广了一个我写的工具。
我创建了一个容器化的SSH服务器,你可以将其'贴在任何运行的容器上。 贴到任何正在运行的容器上。 这样你就可以和每个容器一起创建组成。 唯一的要求是容器有Bash。
下面的例子将启动一个连接到容器上的 SSH 服务器,名称为 'my-container'。
当你连接到这个 SSH 服务时(使用你选择的 SSH 客户端),一个 Bash 会话将在容器中启动,名称为 'my-container'。
更多的指针和文档请看。 https://github.com/jeroenpeeters/docker-ssh
如果你像我一样在这里寻找Docker-compose的具体答案,它提供了一个简单的方法,而不必查找生成的容器ID。
docker-compose exec
根据你的docker-compose.yml
文件获取服务的名称。所以要为你的'web' 服务的Bash shell,你可以这样做
如果你在Windows上使用Docker,并且想获得容器的shell访问权限,请使用这个。
很可能您已经安装了Git Bash。 **如果您没有安装,请务必安装。
使用此命令SSH进入一个Docker容器。
在某些情况下,你的图像可能是基于阿尔卑斯山的。 在这种情况下,它会扔。
因为
/bin/bash
并不存在。 你应该使用。或
如果容器已经退出了(可能是由于一些错误),你可以做的是
或
或
来创建一个新的容器,并将一个shell放入其中。 由于你指定了--rm,当你退出shell时,容器将被删除。
要在Windows容器中连接到cmd,使用
其中d8c25fde2769是集装箱ID。
GOINSIDE解决方案
安装 "goinside "命令行工具。
并进入一个docker容器里面,终端大小合适,并。
老答案
很简单!
列出你所有的Docker镜像。
在我的系统中,它显示出以下输出。
我的PC上有两个Docker镜像。 比方说,我想运行第一个。
这将使你对容器的终端控制。 现在你可以在容器内进行所有类型的shell操作。 比如执行
ls
会输出文件系统根目录下的所有文件夹。使用。
另一种方法,虽然有危险,就是用
attach
,但如果你Ctrl</kbd>。docker logs -f
。使用这个命令。
要检查文件,运行
docker run -it <image> /bin/bash
得到一个交互式终端。 图像列表可以通过docker images
获得。 与docker exec
相反,这个解决方案在映像不启动(或运行后立即退出)的情况下也能工作。docker exec
肯定会是一个解决方案。处理你问的问题的一个简单方法是,将Docker里面的目录挂载到本地系统'的目录中。这样,你就可以即时查看本地路径的变化。
或者根据外壳的不同,它可以是
你可以通过
docker ps
命令获得container-Id。-i
=互动式-t
=分配一个伪TTY。你可以在docker容器中通过传递选项-ti与终端进行交互。
-t代表终端 -i代表交互式
如果你安装了Docker与
Kitematic
,你可以使用GUI。 从Docker图标打开Kitematic
,在Kitematic
窗口中选择你的容器,然后点击exec
图标。在这个GUI中,你也可以看到容器日志和很多容器信息(在设置选项卡中)。
[![从菜单中选择Kitematic][1]][1]。
[![点击执行][2]][2]
[1]: https://i.stack.imgur.com/CIUnq.jpg [2]: https://i.stack.imgur.com/GDdTz.jpg
我已经创建了一个终端功能,以便于访问容器的终端'。 也许它对你们也有用。
所以结果是,不需要输入:
你'会写。
在你的 ~/.bash_profile 中加入以下内容(或者其他任何适合你的内容),然后打开一个新的终端窗口,享受这个快捷方式。