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

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


当前回答

要猛击正在运行的容器,请键入以下命令:

docker exec -t -i container_name /bin/bash

or

docker exec -ti container_name /bin/bash

or

docker exec -ti container_name sh

其他回答

您可以通过传递选项-ti与docker容器中的终端交互

docker run --rm -ti <image-name>
eg: docker run --rm -ti ubuntu

-t代表终端-i代表交互式

很简单!

列出所有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 Compose特定的答案,它提供了一种简单的方法,无需查找生成的容器ID。

docker-compose-exec根据docker-coompose.yml文件获取服务的名称。

因此,要为您的“web”服务获取Bash shell,您可以执行以下操作:

$ docker-compose exec web bash

另一种选择是使用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