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

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


当前回答

很简单!

列出所有Docker图像:

sudo docker images

在我的系统上,它显示了以下输出:

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
bash                latest              922b9cc3ea5e        9 hours ago
14.03 MB
ubuntu              latest              7feff7652c69        5 weeks ago         81.15 MB

我的电脑上有两个Docker映像。假设我想运行第一个。

sudo docker run -i -t ubuntu:latest /bin/bash

这将为您提供容器的终端控制。现在,您可以在容器内执行所有类型的shell操作。像这样ls将输出文件系统根目录中的所有文件夹。

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

其他回答

注意:这个答案提升了我写的一个工具。

我已经创建了一个容器化的SSH服务器,您可以将其“粘贴”到任何正在运行的容器。这样,您可以使用每个容器创建合成。唯一的要求是容器具有Bash。

以下示例将启动一个连接到名为“mycontainer”的容器的SSH服务器。

docker run -d -p 2222:22 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e CONTAINER=my-container -e AUTH_MECHANISM=noAuth \
  jeroenpeeters/docker-ssh

ssh localhost -p 2222

当您连接到此SSH服务(使用您选择的SSH客户端)时,将在名为“我的容器”的容器中启动Bash会话。

有关更多指针和文档,请参阅:https://github.com/jeroenpeeters/docker-ssh

使用以下命令启动Docker容器中的会话:

sudo docker exec -i -t (container ID) bash

很简单!

列出所有Docker图像:

sudo docker images

在我的系统上,它显示了以下输出:

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
bash                latest              922b9cc3ea5e        9 hours ago
14.03 MB
ubuntu              latest              7feff7652c69        5 weeks ago         81.15 MB

我的电脑上有两个Docker映像。假设我想运行第一个。

sudo docker run -i -t ubuntu:latest /bin/bash

这将为您提供容器的终端控制。现在,您可以在容器内执行所有类型的shell操作。像这样ls将输出文件系统根目录中的所有文件夹。

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

要检查文件,请运行docker run-it<image>/bin/sh以获得交互式终端。图像列表可以通过docker图像获得。与docker exec相反,这种解决方案也适用于图像未启动(或运行后立即退出)的情况。

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