使用某个镜像的后台模式启动一个容器linux
docker run -d [镜像名]nginx
以咱们现有的centos镜像为例,咱们发现使用这种模式启动运行一个镜像返回了实例信息,说明成功了。可是咱们没有看到docker ps中有这个刚启动的实例。缘由是咱们没有以交互模式进入容器,而是经过后台启动,启动运行以后,这个容器已经运行完了,本身结束了。web
用docker ps -a 进行查看,发现容器已经退出了:docker
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker run -d centos a45a5db25de8d5cfd233e748d1c26609701f91c66b9f3bab72f2055cf189fe82 neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
Docker容器后台运行,就必须在容器内有一个前台进程。容器运行的命令必须是那些一直挂起的命令(如top、tail),不然就会自动退出。shell
这个是docker的机制问题,好比你的web容器,咱们以nginx为例,正常状况下,咱们配置启动服务,只要配置相应的service便可。例如 service nginx startjson
可是这样作,nginx为后台进程模式运行,就致使docker容器前台没有运行应用。这样的容器经过后台模式启动后,会当即结束,由于它无事情可作了。centos
因此最佳的解决方案是,将你要运行的程序在容器中之前台进程的形式运行。bash
(本文出自oschina博主happybks的博文:https://my.oschina.net/happyBKs/blog/3014246,转载请在文章开头显著位置注明正确出处)架构
docker logs -f -t --tail [容器id]app
-t 是加入时间戳
-f 跟随最新的日志打印
--tail 数字显示最后多少条
咱们先想一想弄一个什么进程到容器内的前台运行,可以持续运行不结束,以使得容器也不结束运行。
这里咱们就用到了docker run的另外一个参数-c,意思是启动容器后在容器内运行某个命令command,或者运行某个shell代码段。固然还须要制定用什么运行,好比运行shell代码块,须要指明\bin\sh
例如,我之后台模式运行一个镜像的实例,该容器正常启动,我查看docker容器进程,发现它虽然是后台模式启动但仍然活着,缘由就是咱们在启动容器的时候指定了容器内在容器启动后运行一个shell脚本,脚本内容是循环执行每两秒钟打印hello happyBKs,这个循环一直不结束,容器内的前台进程一直存在,容器也就不会结束一直活着。
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker run -d centos /bin/sh -c "while true;do echo hello happyBKs;sleep 2;done" 62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23 neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 62ba7bb94bcf centos "/bin/sh -c 'while t…" 6 seconds ago Up 4 seconds trusting_noyce neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
接下来咱们来查看容器内的日志。
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker logs 62ba7bb94bcf hello happyBKs hello happyBKs hello happyBKs hello happyBKs 很长很长,此处省略不少行 hello happyBKs hello happyBKs hello happyBKs neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
若是你以为太长了,若是你须要看日志的打印时间,若是你但愿像linux命令那样动态查看日志更新的最后几行,请使用:
--tail 是将最新的、在末尾的n条打印出来。
-f 会让打印日志一直处于前台监控中,持续输出。此时行数会继续增长,不受--tail的约束。
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker logs -t -f --tail 3 62ba7bb94bcf 2019-02-24T13:27:46.490080464Z hello happyBKs 2019-02-24T13:27:48.492482165Z hello happyBKs 2019-02-24T13:27:50.494961946Z hello happyBKs 2019-02-24T13:27:52.497321137Z hello happyBKs 2019-02-24T13:27:54.499800502Z hello happyBKs 2019-02-24T13:27:56.502329416Z hello happyBKs ^C neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
这里顺便提一下,咱们用启动时传入的命令或者shell代码,会在docker ps中体现:
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 62ba7bb94bcf centos "/bin/sh -c 'while t…" 10 minutes ago Up 10 minutes trusting_noyce neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
docker top [容器id]
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker top 62ba7bb94bcf UID PID PPID C STIME TTY TIME CMD root 31174 31156 0 21:21 ? 00:00:00 /bin/sh -c while true;do echo hello happyBKs;sleep 2;done root 31875 31174 0 21:35 ? 00:00:00 sleep 2 neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
docker inspect [容器id]
docker容器就像是一个同心卷儿,一层套一层。咱们想要查看容器的详细信息,可使用inspect命令。
具体的咱们放到之后的文章中展开讲。
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker inspect 62ba7bb94bcf [ { "Id": "62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23", "Created": "2019-02-24T13:21:02.490920581Z", "Path": "/bin/sh", "Args": [ "-c", "while true;do echo hello happyBKs;sleep 2;done" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 31174, "ExitCode": 0, "Error": "", "StartedAt": "2019-02-24T13:21:03.913983396Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:1e1148e4cc2c148c6890a18e3b2d2dde41a6745ceb4e5fe94a923d811bf82ddb", "ResolvConfPath": "/var/lib/docker/containers/62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23/resolv.conf", "HostnamePath": "/var/lib/docker/containers/62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23/hostname", "HostsPath": "/var/lib/docker/containers/62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23/hosts", "LogPath": "/var/lib/docker/containers/62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23/62ba7bb94bcf721a216d92b7cb0b4aae2705b94379115e33655fe02a71f42d23-json.log", "Name": "/trusting_noyce", "RestartCount": 0, "Driver": "btrfs", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "docker-default", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "default", "PortBindings": {}, "RestartPolicy": { "Name": "no", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "CapAdd": null, "CapDrop": null, "Dns": [], "DnsOptions": [], "DnsSearch": [], "ExtraHosts": null, "GroupAdd": null, "IpcMode": "shareable", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "ConsoleSize": [ 0, 0 ], "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": [], "BlkioDeviceReadBps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteIOps": null, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": [], "DeviceCgroupRules": null, "DiskQuota": 0, "KernelMemory": 0, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": false, "PidsLimit": 0, "Ulimits": null, "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0, "MaskedPaths": [ "/proc/acpi", "/proc/kcore", "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware" ], "ReadonlyPaths": [ "/proc/asound", "/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger" ] }, "GraphDriver": { "Data": null, "Name": "btrfs" }, "Mounts": [], "Config": { "Hostname": "62ba7bb94bcf", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh", "-c", "while true;do echo hello happyBKs;sleep 2;done" ], "Image": "centos", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": { "org.label-schema.build-date": "20181205", "org.label-schema.license": "GPLv2", "org.label-schema.name": "CentOS Base Image", "org.label-schema.schema-version": "1.0", "org.label-schema.vendor": "CentOS" } }, "NetworkSettings": { "Bridge": "", "SandboxID": "34abeb7aac0cb1347e69a5e4c95e7c8417e4ddd7c01662c91e06f25f11e5485b", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": {}, "SandboxKey": "/var/run/docker/netns/34abeb7aac0c", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "cb0237dcf5c368cd4eeb85df53db991215b362d7a17a5bae4d8463f33a19b46a", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:02", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "f862fd9cba11d2e4a151cad0e0d6cdbf8a9c967529a89151ee4bfd520d955acb", "EndpointID": "cb0237dcf5c368cd4eeb85df53db991215b362d7a17a5bae4d8463f33a19b46a", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02", "DriverOpts": null } } } } ] neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
咱们先将刚才的容器停了,而后从新启动一个。
以命令行的方式进行交互启动,docker run -it [镜像名] /bin/bash
/bin/bash是指以命令行方式交互,默承认以省略,即咱们一直用的docker run -it [镜像名]
而后咱们开始咱们的示例操做:
neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker kill 62ba7bb94bcf 62ba7bb94bcf neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> docker run -it centos /bin/bash [root@a09b570600a7 /]# [root@a09b570600a7 /]# [root@a09b570600a7 /]# cd tmp/ [root@a09b570600a7 tmp]# ll total 4 -rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP -rw------- 1 root root 0 Dec 5 01:36 yum.log [root@a09b570600a7 tmp]# [root@a09b570600a7 tmp]# [root@a09b570600a7 tmp]# touch happybks.txt [root@a09b570600a7 tmp]# echo "hi happyBKs" >> happybks.txt [root@a09b570600a7 tmp]# ll total 8 -rw-r--r-- 1 root root 12 Feb 24 14:02 happybks.txt -rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP -rw------- 1 root root 0 Dec 5 01:36 yum.log [root@a09b570600a7 tmp]# [root@a09b570600a7 tmp]# neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin> neil@linux-famw:~/IDE/pycharm-community-2018.3.2/bin>
在启动容器中,咱们以交互模式进入了容器命令行,咱们偷偷在/tmp建了一个文件,并写入了一句话。而后咱们不关闭容器的方式Ctrl+P,Q退出交互模式。
若是咱们想再次进入容器进行命令操做怎么办呢?
docker attach [容器id]
neil@linux-famw:~> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a09b570600a7 centos "/bin/bash" 15 minutes ago Up 15 minutes infallible_leavitt neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker attach a09b570600a7 [root@a09b570600a7 tmp]# [root@a09b570600a7 tmp]# ll total 8 -rw-r--r-- 1 root root 12 Feb 24 14:02 happybks.txt -rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP -rw------- 1 root root 0 Dec 5 01:36 yum.log [root@a09b570600a7 tmp]# cat happybks.txt hi happyBKs [root@a09b570600a7 tmp]# [root@a09b570600a7 tmp]# [root@a09b570600a7 tmp]# [root@a09b570600a7 tmp]# [root@a09b570600a7 tmp]# read escape sequence neil@linux-famw:~> neil@linux-famw:~>
若是你只是想操做一个命令,会不会以为这样进入容器、输入命令、再Ctrl +PQ的方式太麻烦,还有一种在容器外宿主机上对正在运行的容器执行一个容器内命令的方法。
方式2:在宿主机执行一个容器内的命令
docker exec -t [容器id] [容器内的命令]
neil@linux-famw:~> neil@linux-famw:~> docker exec -t a09b570600a7 ll OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"ll\": executable file not found in $PATH": unknown neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a09b570600a7 centos "/bin/bash" 24 minutes ago Up 24 minutes infallible_leavitt neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker exec -t a09b570600a7 ls -l /tmp total 8 -rw-r--r-- 1 root root 12 Feb 24 14:02 happybks.txt -rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP -rw------- 1 root root 0 Dec 5 01:36 yum.log neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker exec -t a09b570600a7 cat /tmp/happybks.txt hi happyBKs neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~>
咱们尝试了ls和cat命令,从宿主执行容器内的ls和cat命令都成功的将容器内的命令行返回内容 返回到了宿主机的命令行。可是咱们发现一些linux的扩展命令有的并不支持,例如ll
这里须要说一下,其实docker exec命令并非不能进入容器内,相反,它更为强大。咱们能够用exec进入容器,就像以前attach同样。
顺便说一下,-it的-i是交互,-t是启动终端。若是你写-t,你也能进入容器内,可是你没法输入任何命令,现象有点像卡住了,实际上是你命令没有启用交互-i形成的。
neil@linux-famw:~> docker exec -it a09b570600a7 /bin/bash [root@a09b570600a7 /]# [root@a09b570600a7 /]# [root@a09b570600a7 /]# cd /tmp [root@a09b570600a7 tmp]# ll total 8 -rw-r--r-- 1 root root 12 Feb 24 14:02 happybks.txt -rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP -rw------- 1 root root 0 Dec 5 01:36 yum.log [root@a09b570600a7 tmp]#
二者的区别:
attach: 直接进入容器启动命令终端,不会启动新的进程
exec:是在容器中打开新的终端,而且能够启动新进程
从容器内拷贝文件到宿主机
加入你在正在运行的容器内运行产生了一些数据,但愿吧数据拷贝出来。
docker cp [容器id]:[容器内路径] [目的主机路径]
neil@linux-famw:~> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a09b570600a7 centos "/bin/bash" 42 minutes ago Up 42 minutes infallible_leavitt neil@linux-famw:~> neil@linux-famw:~> docker cp a09b570600a7:/tmp/happybks.txt ~/ neil@linux-famw:~> ll 总用量 20 drwxr-xr-x 23 neil users 4096 12月 31 13:31 anaconda3 drwxr-xr-x 2 neil users 6 7月 10 2018 bin drwxr-xr-x 2 neil users 116 7月 21 2018 Desktop drwxr-xr-x 3 neil users 85 10月 6 23:23 Documents drwxr-xr-x 5 neil users 4096 2月 16 14:55 Downloads drwxr-xr-x 3 neil users 63 12月 18 22:38 flink drwxr-xr-x 2 neil users 6 10月 21 14:51 hadoop -rw-r--r-- 1 neil users 12 2月 24 22:02 happybks.txt drwxr-xr-x 6 neil users 296 1月 1 20:43 IDE drwxr-xr-x 3 neil users 27 12月 23 18:41 IdeaProjects drwxr-xr-x 10 neil users 4096 9月 24 10:10 midware drwxr-xr-x 2 neil users 6 7月 10 2018 Music drwxr-xr-x 3 neil users 24 1月 1 22:45 nltk_data drwxr-xr-x 3 neil users 4096 2月 16 22:19 Pictures drwxr-xr-x 2 neil users 6 7月 10 2018 Public drwxr-xr-x 4 neil users 41 1月 12 11:51 PycharmProjects drwxr-xr-x 3 neil users 16 8月 30 22:40 tempdata drwxr-xr-x 2 neil users 6 7月 10 2018 Templates drwxr-xr-x 2 neil users 6 7月 10 2018 Videos neil@linux-famw:~> neil@linux-famw:~> cat happybks.txt hi happyBKs neil@linux-famw:~>
相应地,我也能够将宿主机的文件用一样的命令拷贝到容器内的某个目录下。
docker cp [宿主机文件路径] [容器id]:[容器内路径]
neil@linux-famw:~> neil@linux-famw:~> touch oschina.txt neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker cp oschina.txt a09b570600a7:/tmp neil@linux-famw:~> neil@linux-famw:~> docker exec -t a09b570600a7 ls -l /tmp total 8 -rw-r--r-- 1 root root 12 Feb 24 14:02 happybks.txt -rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP -rw-r--r-- 1 1000 users 0 Feb 24 14:50 oschina.txt -rw------- 1 root root 0 Dec 5 01:36 yum.log neil@linux-famw:~> neil@linux-famw:~>
这里再顺便说一下,若是容器中止后,咱们想查看刚才容器中的文件,依然能够启动容器查看。
neil@linux-famw:~> neil@linux-famw:~> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a09b570600a7 centos "/bin/bash" About an hour ago Up About an hour infallible_leavitt neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker kill a09b570600a7 a09b570600a7 neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker ps -n 1 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a09b570600a7 centos "/bin/bash" About an hour ago Exited (137) 45 seconds ago infallible_leavitt neil@linux-famw:~> neil@linux-famw:~> docker start a09b570600a7 a09b570600a7 neil@linux-famw:~> neil@linux-famw:~> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a09b570600a7 centos "/bin/bash" About an hour ago Up 5 seconds infallible_leavitt neil@linux-famw:~> neil@linux-famw:~> docker exec -t a09b570600a7 ls -l /tmp total 8 -rw-r--r-- 1 root root 12 Feb 24 14:02 happybks.txt -rwx------ 1 root root 836 Dec 5 01:37 ks-script-h2MyUP -rw-r--r-- 1 1000 users 0 Feb 24 14:50 oschina.txt -rw------- 1 root root 0 Dec 5 01:36 yum.log neil@linux-famw:~> neil@linux-famw:~>
1)被杀死的已经中止的容器依然能够经过docker cp拷贝文件。
2)被杀死的已经中止的容器依然不能够经过docker exec等方式执行容器命令或进入容器内。
neil@linux-famw:~> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a09b570600a7 centos "/bin/bash" About an hour ago Up 2 minutes infallible_leavitt neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker kill a09b570600a7 a09b570600a7 neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker ps -n 1 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a09b570600a7 centos "/bin/bash" About an hour ago Exited (137) 56 seconds ago infallible_leavitt neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker cp a09b570600a7:/tmp/happybks.txt ~/ neil@linux-famw:~> neil@linux-famw:~> neil@linux-famw:~> docker cp a09b570600a7:/tmp/happybks.txt ~/happybks2.txt neil@linux-famw:~> ll 总用量 24 drwxr-xr-x 23 neil users 4096 12月 31 13:31 anaconda3 drwxr-xr-x 2 neil users 6 7月 10 2018 bin drwxr-xr-x 2 neil users 116 7月 21 2018 Desktop -rw-r--r-- 1 neil users 0 2月 24 23:03 docker drwxr-xr-x 3 neil users 85 10月 6 23:23 Documents drwxr-xr-x 5 neil users 4096 2月 16 14:55 Downloads drwxr-xr-x 3 neil users 63 12月 18 22:38 flink drwxr-xr-x 2 neil users 6 10月 21 14:51 hadoop -rw-r--r-- 1 neil users 12 2月 24 22:02 happybks2.txt -rw-r--r-- 1 neil users 12 2月 24 22:02 happybks.txt drwxr-xr-x 6 neil users 296 1月 1 20:43 IDE drwxr-xr-x 3 neil users 27 12月 23 18:41 IdeaProjects drwxr-xr-x 10 neil users 4096 9月 24 10:10 midware drwxr-xr-x 2 neil users 6 7月 10 2018 Music drwxr-xr-x 3 neil users 24 1月 1 22:45 nltk_data -rw-r--r-- 1 neil users 0 2月 24 22:50 oschina.txt drwxr-xr-x 3 neil users 4096 2月 16 22:19 Pictures drwxr-xr-x 2 neil users 6 7月 10 2018 Public drwxr-xr-x 4 neil users 41 1月 12 11:51 PycharmProjects drwxr-xr-x 3 neil users 16 8月 30 22:40 tempdata drwxr-xr-x 2 neil users 6 7月 10 2018 Templates drwxr-xr-x 2 neil users 6 7月 10 2018 Videos neil@linux-famw:~> neil@linux-famw:~> docker exec -t a09b570600a7 ls -l /tmp Error response from daemon: Container a09b570600a7a331350f0b08858593ed4303dba591148c91d8fdee7b9d1262f4 is not running neil@linux-famw:~>
这些命令咱们要有个结构化的了解。