我开始和Docker合作了。我正在使用WordPress的基本图像和docker合成。
我正在尝试ssh到其中一个容器中,以检查在初始构建期间创建的文件/目录。我试着运行docker compose运行containername ls-la,但没有任何效果。即使是这样,我也希望有一个控制台,在那里我可以遍历目录结构,而不是运行一个命令。使用Docker的正确方法是什么?
我开始和Docker合作了。我正在使用WordPress的基本图像和docker合成。
我正在尝试ssh到其中一个容器中,以检查在初始构建期间创建的文件/目录。我试着运行docker compose运行containername ls-la,但没有任何效果。即使是这样,我也希望有一个控制台,在那里我可以遍历目录结构,而不是运行一个命令。使用Docker的正确方法是什么?
当前回答
去侧溶液
安装goinside命令行工具,包括:
sudo npm install -g goinside
并进入码头集装箱,码头尺寸适当,带有:
goinside docker_container_name
旧答案
我们将此代码段放在~/.profile中:
goinside(){
docker exec -it $1 bash -c "stty cols $COLUMNS rows $LINES && bash";
}
export -f goinside
这不仅使每个人都能够进入一个正在运行的容器:
goinside containername
它还解决了固定Docker集装箱码头尺寸的长期问题。如果你面对它,这是非常令人讨厌的。
此外,如果您按照链接进行操作,您的docker容器名称也会有命令完成。
其他回答
易于理解的
docker exec -it <container_id> bash
在上面-它意味着交互式终端。
此外,图像名称:
docker exec -it <REPOSITORY name> bash
去侧溶液
安装goinside命令行工具,包括:
sudo npm install -g goinside
并进入码头集装箱,码头尺寸适当,带有:
goinside docker_container_name
旧答案
我们将此代码段放在~/.profile中:
goinside(){
docker exec -it $1 bash -c "stty cols $COLUMNS rows $LINES && bash";
}
export -f goinside
这不仅使每个人都能够进入一个正在运行的容器:
goinside containername
它还解决了固定Docker集装箱码头尺寸的长期问题。如果你面对它,这是非常令人讨厌的。
此外,如果您按照链接进行操作,您的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容器中的会话:
sudo docker exec -i -t (container ID) bash
在某些情况下,您的图像可以是基于阿尔卑斯山的。在这种情况下,它将抛出:
OCI运行时执行失败:执行失败:container_linux.go:348:启动容器进程导致“exec:\”bash\“:在中找不到可执行文件$PATH“:未知
因为/bin/bash不存在。相反,您应该使用:
docker exec -it 9f7d99aa6625 ash
or
docker exec -it 9f7d99aa6625 sh