
如何连接Docker容器
当您想查看容器内部正在发生什么时,连接到正在运行的Docker容器会很有帮助。如果Docker容器无法正常工作,则可以登录或者连接到容器的Shell
当您想查看容器内部正在发生什么时,连接到正在运行的Docker容器会很有帮助,这样你可以查看docker容器内部状态,调试,排除问题。
如果Docker容器无法正常工作,则可以登录或者连接到容器的Shell,然后运行ps或top之类的命令。您还可以在容器安装命令或者软件,保存当前容器为Docker镜像。
尽管可以在一个容器中运行多个进程,但大多数docker容器仅运行一个进程。可以使用ENTRYPOINT或RUN指令指定启动容器时运行的命令。
docker attach命令允许您在当前终端连接到正在运行的容器。此时你当前终端会话的标准输入,标准输出,标准错误都被容器进程所使用。
你在终端任何输入会被容器进程捕获,容器进程写到标准输出,标准错误都能在当前终端会话中看到。
当您想实时查看写到标准输出,标准错误的内容时,此功能很有用。为更好地了解attach命令的工作原理,我们使用官方的Nginx镜像,创建一个Nginx容器。
docker container run --name my_nginx -d -p 8080:80 nginx命令将使用nginx镜像创建命令为my_nginx的容器。
-p 8080:80选项将容器的端口8080映射到主机端口80。-d指示在后台运行容器。
在连接到docker容器之前,我们需要通过运行命令docker container ls列出容器来验证my_nginx容器是否正在运行。
当确定my_nginx容器正在运行时,接下运行命令docker container attach命令连接到容器,attach子命令的参数可以是容器名称或者容器id。
docker container attach my_nginxdocker container attach my_nginx将以容器名称连接容器。
创建my_nginx容器时将运行nginx镜像默认命令CMD ["nginx", "-g", "daemon off;"]。daemon off指示在前台运行。nginx的标准输入,输出,错误都写到容器的标准重定向中。
运行attach命令时,终端的标准输出,标准出入,标准错误将附加到nginx进程。在浏览器中打开127.0.0.1:8080,您可以实时观看nginx进程的输出。
要访问容器日志,您应该首先使用docker logs命令。要退出容器的连接而不停止容器,请使用CTRL-p CTRL-q组合键。
CTRL-c将停止容器。如果连接的进程接受标准输入,则可以向其该进程发送指令。在这个示例nginx不接受标准输入。因此不接受任何指令。
容器shell
docker exec命令允许您在正在运行的容器中运行命令。我们将使用MySQL镜像演示exec命令的工作方式以及如何使用exec命令进入容器shell会话。
首先启动一个新容器。我们将使用官方的MySQL镜像。
docker container run --name my_mysql -d mysql命令将创建一个名为my_mysql的容器,容器将在后台运行。
docker container exec -it my_mysql ls /var命令将会在容器内执行ls命令。
-i选项使用交互式运行命令,-t指示Docker分配一个伪TTY设备。ls命令将列出容器的/var目录中的文件和目录。
如需要在容器中启动shell会话,可以直接指定shell二进制文件来启动新的shell会话。
您可以使用sh,bash或镜像中所包含的其它shell程序。很多容器都会存在bash和sh等shell程序,你可以尝试其中的一个。
以下命令将在容器内创建一个新的Bash shell会话,您的命令提示符将更改,表明您正在使用容器内部的shell。
docker container exec -it my_mysql /bin/bash现在,您可以像在Linux服务器上一样运行可用的命令。例如运行env获取当前个环境变量的列表。
结论
使用docker exec和docker attach命令可以连接到正在运行的容器。要使用docker容器的shell会话,请使用exec命令启动新的Shell会话。
attach命令将终端的标准输入,标准输出,标准错误连接到正在运行的容器。如有任何疑问,请在下面发表评论。














