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

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


当前回答

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

我已经创建了一个容器化的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

其他回答

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服务器,您可以将其“粘贴”到任何正在运行的容器。这样,您可以使用每个容器创建合成。唯一的要求是容器具有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 exec -t -i container_name /bin/bash

or

docker exec -ti container_name /bin/bash

or

docker exec -ti container_name sh

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

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

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

docker-compose exec php bash

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