我开始和Docker合作了。我正在使用WordPress的基本图像和docker合成。

我正在尝试ssh到其中一个容器中,以检查在初始构建期间创建的文件/目录。我试着运行docker compose运行containername ls-la,但没有任何效果。即使是这样,我也希望有一个控制台,在那里我可以遍历目录结构,而不是运行一个命令。使用Docker的正确方法是什么?


当前回答

历史笔记:在我写下这个答案时,问题的标题是:“如何将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,你就错了!

其他回答

码头工人组成(码头工人4卢比)

docker-compose exec php bash

我在Linux笔记本电脑上使用Docker for Drupal。运行容器后,我使用“docker compose exec php bash”与容器连接,以便运行drush突击队。这对我来说很好。

这对我来说效果最好,因为如果使用它,我真的不必在docker构建中添加入口点。。

sudo docker运行-it--entrypoint/bin/bash<container_name>

在某些情况下,您的图像可以是基于阿尔卑斯山的。在这种情况下,它将抛出:

OCI运行时执行失败:执行失败:container_linux.go:348:启动容器进程导致“exec:\”bash\“:在中找不到可执行文件$PATH“:未知

因为/bin/bash不存在。相反,您应该使用:

docker exec -it 9f7d99aa6625 ash

or

docker exec -it 9f7d99aa6625 sh

另一种选择是使用nsenter。

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid

易于理解的

docker exec -it <container_id> bash

在上面-它意味着交互式终端。

此外,图像名称:

docker exec -it <REPOSITORY name> bash