【发布时间】:2014-11-18 16:57:57
【问题描述】:
在 docker 容器中使用 centos,我只需输入“docker attach container ID”,它就会带我进入 shell 提示符,我可以在其中安装和配置 nginx。
这个更简单:docker.com dockerfile/nginx 您只需运行文件,一切都已安装和配置。
但我不知道如何进入和访问这些文件。
【问题讨论】:
标签: bash nginx centos docker coreos
在 docker 容器中使用 centos,我只需输入“docker attach container ID”,它就会带我进入 shell 提示符,我可以在其中安装和配置 nginx。
这个更简单:docker.com dockerfile/nginx 您只需运行文件,一切都已安装和配置。
但我不知道如何进入和访问这些文件。
【问题讨论】:
标签: bash nginx centos docker coreos
就我而言,标准 bash 并不存在。使用 /bin/sh 帮助了我:
docker run -it -p 80:80 dockerfile/nginx /bin/sh
【讨论】:
UPDATE(稍后介绍的更简单的方法):
docker exec -t -i container_name /bin/bash
原答案
其实你也可以访问一个正在运行的容器。
查找容器的 ID:
docker ps
导出运行容器的进程ID:
PID=$(docker inspect --format '{{.State.Pid}}' my_container_id)
通过更改命名空间“连接”到它:
nsenter --target $PID --mount --uts --ipc --net --pid
最初是在这里描述的:http://jpetazzo.github.io/2014/03/23/lxc-attach-nsinit-nsenter-docker-0-9/
【讨论】:
busybox 构建的,它没有 /bin/bash,所以我只使用了 docker exec -t -i container_name sh,它确实有效
首先确保了解图像和容器之间的区别。运行图像:
docker run -d -p 80:80 dockerfile/nginx
创建一个只执行 nginx 的新容器。这个过程不像shell那样交互。如果你真的需要在容器运行时访问它的文件,你唯一的选择是使用 nsinit、nsenter 或 lxc-attach。详情请查看https://blog.codecentric.de/en/2014/07/enter-docker-container/。
或者,您可能想尝试
docker run -it -p 80:80 dockerfile/nginx /bin/bash
它创建了一个执行交互式 shell 而不是 nginx 的新容器。
【讨论】: