我开始和Docker合作了。我正在使用WordPress的基本图像和docker合成。
我正在尝试ssh到其中一个容器中,以检查在初始构建期间创建的文件/目录。我试着运行docker compose运行containername ls-la,但没有任何效果。即使是这样,我也希望有一个控制台,在那里我可以遍历目录结构,而不是运行一个命令。使用Docker的正确方法是什么?
我开始和Docker合作了。我正在使用WordPress的基本图像和docker合成。
我正在尝试ssh到其中一个容器中,以检查在初始构建期间创建的文件/目录。我试着运行docker compose运行containername ls-la,但没有任何效果。即使是这样,我也希望有一个控制台,在那里我可以遍历目录结构,而不是运行一个命令。使用Docker的正确方法是什么?
当前回答
在我的情况下,出于某些原因,我需要检查每个容器中所有涉及网络的信息。因此,以下命令必须在容器中有效。。。
ip
route
netstat
ps
...
我检查了所有这些答案,没有一个对我有用。我在其他网站上搜索过信息。我不会在这里添加超级链接,因为它不是用英语编写的。因此,我只是为与我有相同要求的人发布了一个总结解决方案。
假设您有一个名为light test的运行容器。按照以下步骤操作。
docker inspect light test-f{{.NetworkSettings.SandboxKey}}。此命令将得到类似/var/run/docker/netns/xxxx的回复。然后是ln-s/var/run/docker/netns/xxxxx/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 exec -t -i container_name /bin/bash
or
docker exec -ti container_name /bin/bash
or
docker exec -ti container_name sh
我创建了一个终端功能,以便更方便地访问容器的终端。也许这对你们也有用:
结果是,不用键入:
docker exec -it [container_id] /bin/bash
你会写:
dbash [container_id]
将以下内容放入~/.bash_profile(或其他适合您的文件),然后打开一个新的终端窗口并享受快捷方式:
#usage: dbash [container_id]
dbash() {
docker exec -it "$1" /bin/bash
}
docker高管肯定会是一个解决方案。解决您提出的问题的一个简单方法是将Docker中的目录安装到本地系统的目录中。
以便您可以立即查看本地路径中的更改。
docker run -v /Users/<path>:/<container path>
2022年解决方案
考虑另一种选择
你为什么需要它?
有一堆基于发行版基本映像的现代docker映像(它们也没有/bin/bash/bin/sh),因此无法将exec-it{container name}bash嵌入其中。
如何在任何容器中剥壳
使用开启器:
需要在环境开启器wordpress中添加别名可以在任何地方运行docker run--rm-it-v/var/run/docker.sock:/var/run/dooker.sock artekaxboy/opener wordpress
您可以使用要连接的任何容器的名称、id或图像名称,而不是wordpress
它的工作原理
Opener是一组打包成docker图像的python脚本。它通过任何唯一属性(名称、id、端口、图像)查找目标容器,并尝试使用bash连接到目标。如果找不到bash,则开启器尝试使用sh进行连接。最后,如果找不找到sh,则任何一个开启器都会将busybox安装到目标容器中,并使用busybox shell连接到目标,在断开连接时,开启器会删除busybox。
历史笔记:在我写下这个答案时,问题的标题是:“如何将ssh插入docker容器?”
正如其他答案所证明的,使用docker exec而不是SSH在本地可访问的运行容器中执行预安装的命令(包括shell)并与之交互是很常见的:
docker exec -it (container) (command)
注:以下答案基于Ubuntu(2016年)。对于非Debian容器,需要对安装过程进行一些翻译。
比方说,出于您自己的原因,您确实希望使用SSH。这需要几个步骤,但可以做到。以下是在容器内运行的命令,用于设置它。。。
apt-get update
apt-get install openssh-server
mkdir /var/run/sshd
chmod 0755 /var/run/sshd
/usr/sbin/sshd
useradd --create-home --shell /bin/bash --groups sudo username ## includes 'sudo'
passwd username ## Enter a password
apt-get install x11-apps ## X11 demo applications (optional)
ifconfig | awk '/inet addr/{print substr($2,6)}' ## Display IP address (optional)
现在,您甚至可以使用X11转发到SSH客户端来运行图形应用程序(如果它们安装在容器中):
ssh -X username@IPADDRESS
xeyes ## run an X11 demo app in the client
以下是一些相关资源:
openssh服务器不会在Docker容器中启动如何在后台模式下将bash或ssh导入正在运行的容器?你能在Linux Docker容器中运行GUI应用程序吗?通过搜索可以找到其他有用的图形访问方法:Docker X11如果你在Docker容器中运行SSHD,你就错了!