如何进入这个 dockerfile / nginx 容器?

Posted

技术标签:

【中文标题】如何进入这个 dockerfile / nginx 容器?【英文标题】:How do I enter this dockerfile / nginx container? 【发布时间】:2014-11-18 16:57:57 【问题描述】:

在 docker 容器中使用 centos,我只需输入“docker attach container ID”,它就会带我进入 shell 提示符,我可以在其中安装和配置 nginx

这个更简单:docker.com dockerfile/nginx 您只需运行文件,一切都已安装和配置。

但我不知道如何进入和访问这些文件。

【问题讨论】:

【参考方案1】:

就我而言,标准 bash 并不存在。使用 /bin/sh 帮助了我:

docker run -it -p 80:80 dockerfile/nginx /bin/sh

【讨论】:

【参考方案2】:

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/

【讨论】:

我的 docker 实例是基于 busybox 构建的,它没有 /bin/bash,所以我只使用了 docker exec -t -i container_name sh,它确实有效【参考方案3】:

首先确保了解图像和容器之间的区别。运行图像:

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 的新容器。

【讨论】:

docker run -d -p 80:80 dockerfile/nginx /bin/bash 这给了我一个错误 来自守护进程的错误响应:无法启动容器 a126421fd50a64a939265019b64f47d86bc54a82f4dd4c29088da4e8d7f15c33: 绑定 0.0.0.0:8 端口失败:已经分配,​​所以我先停止容器并再次尝试。有效。我得到了新容器所以我试图附加到它,但这是另一个错误。您无法附加到已停止的容器,请先启动它我可以重新启动,但它会立即停止。 答案中有错字。对于 /bin/bash,命令行参数应该是 -it 而不是 -d(守护进程)。在我的回答中更正了这一点。

以上是关于如何进入这个 dockerfile / nginx 容器?的主要内容,如果未能解决你的问题,请参考以下文章

docker构建镜像

Docker 之 Dockerfile

Docker---Dockerfile编写nginx

Docker---镜像详解Dockerfile编写及优化部署nginx

Dockers安装nginx

DockerFile创建一个nginx容器的全过程