Docker日志logging到容器
我是Docker
新用户。 我面临的第一个问题是login到容器中。
我find解决scheme来执行容器bash命令
docker exec -it ID bash
但是,这只是安装/删除软件包的解决scheme。 如果我想在Docker容器中编辑nginxconfiguration,需要使用什么?
其中一个解决scheme可以通过SSH连接login到容器,但也许Docker
有这个东西?,我的意思是容易访问没有安装OpenSSH
?
如何:Docker日志logging到容器
是的你可以。 您可以login正在运行的容器。
现有的docker exec
或者docker attach
是不够好的。 寻找在Docker容器内启动一个shell? 解决scheme是: jpetazzo / nsenter有两个命令: nsenter
和nsenter
docker-enter
。
如果你在Linux环境下,那么运行下面的命令:
docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter docker ps # replace <container_name_or_ID> with real container name or ID. PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>) nsenter --target $PID --mount --uts --ipc --net --pid
那么你在运行的容器中,你现在可以运行任何的linux命令。
我更喜欢其他命令docker-enter
。 如果没有login容器,可以通过docker-enter
命令直接在容器中运行linux命令。 其次,我不能记忆nsenter
命令的多个选项,也不需要查找容器的PID
。
docker-enter 0e8c248982c5 ls /opt
如果你是Mac或Windows用户,请使用工具箱运行docket:
docker-machine ssh default docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter PID=$(docker inspect --format {{.State.Pid}} 0e8c248982c5) sudo nsenter --target $PID --mount --uts --ipc --net --pid
如果你是Mac或Windows用户,请使用boot2docker运行docket:
boot2docker ssh docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter PID=$(docker inspect --format {{.State.Pid}} 0e8c248982c5) sudo nsenter --target $PID --mount --uts --ipc --net --pid
注意:命令docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
只需要运行一次。
如何:编辑nginxconfiguration
对于第二个问题,你可以在Docker中考虑ONBUILD
。
ONBUILD COPY nginx.conf /etc/nginx/nginx.conf
有了这个解决scheme,你可以:
-
在本地编辑
nginx.conf
,你可以使用任何存在的编辑器。 -
更改nginxconfiguration后,不需要每次都创build映像。
-
每次在本地修改
nginx.conf
文件后,都需要停止,删除并重新运行这个containe,当docker run
命令时,新的nginx.conf
文件将被部署到docker run
。
你可以在这里参考关于如何使用ONBUILD
的细节: ONBUILD
build
如你所说,
docker exec -it container_id bash
然后使用你最喜欢的编辑器编辑任何nginxconfiguration文件。 通常会安装vi或nano,但如果这是您最喜爱的编辑器,则可能需要安装emacs或vim
如果你只有几个字符修改,
docker exec container_id sed ...
可能会做这项工作。 如果你想SSH进入你的容器,你将需要安装SSH并处理SSH密钥,我不确定这是你需要的。
你错了。 您应该很less需要login到容器来编辑文件。
相反,使用-v
从主机挂载nginx.conf
。 这样你可以用普通的编辑器编辑文件。 一旦你的configuration按照你想要的方式工作,你就可以build立一个新的映像。
一般来说,你必须进入短暂的容器的思维。 你不打补丁; 你把它们扔掉,用一个固定的版本replace它们。