容器深入交互,就是这三个命令!

  1. docker attch 连接容器的标准输入/输出流

  2. **docker exec**在运行的容器内执行命令

  3. **docker cp**在容器与主机间复制文件或目录

在Docker容器的日常管理与运维中,与容器进行交互、执行命令以及进行数据交换是至关重要的操作。本文将介绍docker attachdocker execdocker cp这三个命令,它们分别提供了连接到容器的标准输入/输出流、在容器内执行命令以及在容器与主机之间复制文件的功能,极大地丰富了对容器的操作手段,提升了容器管理的灵活性与效率。

1. docker attch 连接容器的标准输入/输出流

docker attach命令允许用户直接连接到正在运行的容器的标准输入(stdin)、标准输出(stdout)和标准错误(stderr)流,实现与容器内进程的实时交互。一旦连接,用户在终端上的输入将传递给容器内的进程,同时容器内进程的输出也会实时显示在用户的终端上。

运行docker run -it debian /bin/bash启动一个shell

ruby 复制代码
➜  ~ docker run -it debian /bin/bashroot@0a1ad8ed38ee:/#

新打开一个终端docker attach 0a1ad会进入刚刚运行的debian容器中

ruby 复制代码
➜  ~ docker attach 0a1adroot@0a1ad8ed38ee:/#

不推荐使用,docker attach进入容器当打开多个窗口,一个窗口执行命令,多个窗口的同步执行的。推荐新方式docker exec

2. docker exec在运行的容器内执行命令

docker exec命令允许用户在已经运行的容器内部执行任意命令或脚本,无需直接连接到容器的标准输入/输出流。执行结果(包括输出和返回码)将直接返回到执行命令的主机终端。

css 复制代码
docker exec [OPTIONS] <container_name_or_id> COMMAND [ARG...]

参数选项

  • -it:启用交互式终端,适用于执行需要用户输入或提供实时输出的命令。

  • -u <user>:以指定用户身份执行命令。

  • -w <working_dir>:在指定的工作目录下执行命令。

    ➜ ~ docker exec hello-go lsDockerfileDockerfile-builderREADME.mdappgo.modgo.sumhttp-client.env.jsonhttp.httpmain.go

在容器内执行命令,例子中执行ls,默认在工作目录执行。

bash 复制代码
➜  ~ docker exec -it hello-go sh/app # pwd/app

添加-it参数,可以进入容器内的shell。

bash 复制代码
➜  ~ docker exec -it -u root hello-go sh/app # whoamiroot

添加-u可以为执行的命令设置由哪个用户执行。例子中使用了root,使用命令whoami可以查看当前执行shell的用户为root。

3. docker cp在容器与主机间复制文件或目录

docker cp命令用于在Docker容器与主机之间双向复制文件或目录,便于数据交换与备份。

bash 复制代码
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATHdocker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

拷贝容器文件到宿主机

bash 复制代码
➜  ~ docker cp hello-go:/app/README.md ./README.mdSuccessfully copied 2.05kB to /root/README.md➜  ~ ls -l-rw-r--r--  1 root root     182 Apr 12 04:45 README.md

通过docker cp hello-go:/app/README.md ./README.md,从hello-go容器的工作目录下,拷贝README.md到宿主机当前目录。

bash 复制代码
➜  ~ echo "Hello Wolrd" > README.md➜  ~ cat  README.mdHello Wolrd➜  ~ ls -ltotal 15044-rw-r--r--  1 root root      12 Apr 13 03:02 README.md

README.md中输出Hello World,可以看到cat输出内容已经发生改变,文件大小也发生了变化。

拷贝宿主机文件到容器

javascript 复制代码
➜  ~  docker cp ./README.md hello-go:/app/README.mdSuccessfully copied 2.05kB to hello-go:/app/README.md

Successfully 表示成功将宿主机下的README.md拷贝到容器/app/README.md

bash 复制代码
➜  ~ docker exec hello-go cat README.mdHello Wolrd

使用docker exec运行cat打印一下README.md,可以看到输出内容和执行echo "Hello Wolrd" > README.md后的README.md结果是一致。

docker attachdocker execdocker cp命令分别提供了连接容器标准输入/输出流、在容器内执行命令以及在容器与主机之间复制文件的功能,为Docker容器的交互、管理与数据交换提供了强大的支持。熟练掌握这三个命令,将极大提升容器操作的便利性与工作效率,助力于容器化环境的高效运维与开发。

忍不住要加个关注!不是我吹,但你会后悔没关注的!

相关推荐
修罗王14 小时前
Linux Docker 服务管理与排查实战指南(新手速查版)
运维·docker
张龙68717 小时前
Docker 镜像瘦身实战:从 1.2GB 到 128MB,我踩过的 7 个坑和一套可复制的方法论
运维·后端·docker
杨浦老苏18 小时前
开源堡垒机 Warpgate:一个容器搞定 SSH、MySQL 和 Web 访问
运维·docker·ssh·堡垒机·群晖
ERD Online19 小时前
docker-compose 一键部署的 MIT 开源数据库建模平台
数据库·docker·开源
三言老师20 小时前
CentOS7.9 + Kubernetes 1.18.20 -清理所有 docker / containerd 残留
docker·容器·kubernetes
circuitsosk20 小时前
从Docker到Kubernetes:AI应用服务化与弹性伸缩的落地实践
人工智能·docker·kubernetes·ai应用部署
showyoui21 小时前
K8s 集群迁移踩坑:Istio 升级后 nginx 403
网络·docker·kubernetes·istio·service_mesh
golang学习记2 天前
Go 项目使用docker compose的正确方式
开发语言·docker·golang
雨声不在2 天前
私有 Docker Registry 排障实录:两个隐蔽的坑
docker·容器
读书读傻了哟2 天前
解决docker拉取镜像报错failed to resolve reference “docker.io/xxx“...i/o timeout问题
运维·docker·容器