我已经注意到,与docker,我需要了解什么发生在容器内或什么文件存在于那里。一个例子是从docker索引中下载图像-你不知道图像包含什么,所以不可能启动应用程序。
理想的情况是能够ssh进入它们或具有同等功能。是否有工具可以做到这一点,或者我对docker的概念错误,认为我应该能够做到这一点。
我已经注意到,与docker,我需要了解什么发生在容器内或什么文件存在于那里。一个例子是从docker索引中下载图像-你不知道图像包含什么,所以不可能启动应用程序。
理想的情况是能够ssh进入它们或具有同等功能。是否有工具可以做到这一点,或者我对docker的概念错误,认为我应该能够做到这一点。
当前回答
试着用
docker exec -it <container-name> /bin/bash
有可能bash没有实现。你可以用这个
docker exec -it <container-name> sh
其他回答
对于一个已经运行的容器,你可以这样做:
dockerId=$(docker inspect -f {{.Id}} [docker_id_or_name])
cd /var/lib/docker/btrfs/subvolumes/$dockerId
你必须是root用户才能cd到那个目录。如果您不是root用户,请先输入“sudo su”再执行该命令。
编辑:在v1.3之后,请参阅Jiri的回答-它更好。
容器的文件系统在docker的data文件夹中,通常在/var/lib/docker。要启动并检查正在运行的容器文件系统,请执行以下操作:
hash=$(docker run busybox)
cd /var/lib/docker/aufs/mnt/$hash
现在,当前的工作目录是容器的根目录。
你可以在容器中运行bash: 运行ubuntu /bin/bash
docker exec命令在运行中的容器中运行命令在多种情况下都有帮助。
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] Run a command in a running container Options: -d, --detach Detached mode: run command in the background --detach-keys string Override the key sequence for detaching a container -e, --env list Set environment variables -i, --interactive Keep STDIN open even if not attached --privileged Give extended privileges to the command -t, --tty Allocate a pseudo-TTY -u, --user string Username or UID (format: [:]) -w, --workdir string Working directory inside the container
例如:
1)在bash中访问正在运行的容器文件系统:
docker exec -it containerId bash
2)在bash中以root身份访问正在运行的容器文件系统,以获得所需的权限:
docker exec -it -u root containerId bash
这对于能够在容器中作为根执行一些处理特别有用。
3)在bash中访问特定工作目录下运行的容器文件系统:
docker exec -it -w /var/lib containerId bash
另一个技巧是使用原子工具来做如下的事情:
mkdir -p /path/to/mnt && atomic mount IMAGE /path/to/mnt
Docker映像将被挂载到/path/to/mnt,以便您检查它。