从容器命令提示符在主机上运行命令

时间:2018-05-04 11:05:57

标签: docker

我使用portainer来管理容器,效果很好。

https://portainer.io/

但是当我连接到控制台时,我得到容器的命令提示符。有没有办法运行像ls / home /这样列出主机上文件的简单命令?

换句话说,是否有任何图像将“按原样”挂载主机服务器的文件系统?

3 个答案:

答案 0 :(得分:2)

以下是使用docker命令行的示例:

$ docker run --rm -it -v ~/Desktop:/Desktop alpine:latest /bin/sh
/ # ls /Desktop/

您可以根据需要扩展方法。试验它。了解different mount options

我知道MacOS上的Docker应用程序提供了默认卷安装的方法。 Portainer还声称提供volume management screen,我还没有使用它。

希望这有帮助。

答案 1 :(得分:2)

如果您正在处理服务或现有的正在运行的容器,则在大多数情况下您可以直接访问shell。假设你有一个名为“meow”的容器。你可以运行:

docker exec -it meow bash

它会让你进入bash shell。您实际上需要知道是否已安装bash,或尝试调用sh

“i”选项表示它应该是交互式的,“t”选项表示它应该模拟TTY终端。完成后,您可以按 Ctrl + D 退出容器。

答案 2 :(得分:0)

首先:您从不一直希望这样做。

安装到容器的卷用于保存容器的数据,因为容器设计为易变的(容器本身不应该保持状态,因此重启容器n次应导致每次启动时都是相同的容器状态) - 所以将卷视为一个数据库,其中应存储所有数据(容器的状态)。

以这种方式查看卷可以更容易地决定不共享主机的整个文件系统,因为此容器将读取对主机操作系统文件本身的写入权限huge security threat

跨容器共享卷被认为是一种糟糕的容器架构,更不用说共享整个主机文件系统了。

如果您需要访问主机以在主机上运行命令或任务,我会向您的主机提出简单的ssh(或远程桌面)。

如果您的容器由于某种原因需要访问特定文件夹,那么您应该考虑mounting or binding that folder to the container

docker run -d --name devtest --mount source=myvol2,target=/app nginx:latest

我建议将该文件夹的内容复制到docker托管卷(docker / volumes树下的文件夹)并将容器绑定到此卷而不是原始文件夹,以最大限度地减少容器对主机的影响&# 39; s OS。