我正在通过以下链接使用 docker 软件:http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html。有两点让我感到困惑。
1:为了避免每次都输入sudo,作者提到可以通过以下命令将用户添加到Docker用户组中:
$ sudo usermod -aG docker $USER
我在我的电脑上尝试过这个,我没有使用 $USER,而是使用了 $myusername,我的用户名是我在电脑上的登录用户名。然后失败了……哈哈。我想我需要改用 $USER。
2:我尝试使用
$ sudo docker container run -it ubuntu bash
然后我就不知道怎么杀了它了....哈哈...因为我不知道容器ID,而且好像我处于ubuntu模式,无法返回。以下是输出。
:~$ sudo docker container run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
7ddbc47eeb70: Pull complete
c1bbdc448b72: Pull complete
8c3b70e39044: Pull complete
45d437916d57: Pull complete
Digest: sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d
Status: Downloaded newer image for ubuntu:latest
root@c3bfdf5922ea:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@c3bfdf5922ea:/# cd lib64
root@c3bfdf5922ea:/lib64# ls
ld-linux-x86-64.so.2
root@c3bfdf5922ea:/lib64# cd ..
root@c3bfdf5922ea:/# cd home
root@c3bfdf5922ea:/home# ls
root@c3bfdf5922ea:/home# mkdir jack
root@c3bfdf5922ea:/home# ls
jack
root@c3bfdf5922ea:/home# cd ..
root@c3bfdf5922ea:/# cd sys
root@c3bfdf5922ea:/sys# ls
block bus class dev devices firmware fs hypervisor kernel module power
root@c3bfdf5922ea:/sys# cd kernel
root@c3bfdf5922ea:/sys/kernel# ls
boot_params fscaps kexec_crash_size notes security uevent_seqnum
cgroup iommu_groups kexec_loaded profiling slab vmcoreinfo
config irq livepatch rcu_expedited tracing
debug kexec_crash_loaded mm rcu_normal uevent_helper
root@c3bfdf5922ea:/sys/kernel# cd
root@c3bfdf5922ea:~# sudo docker container kill
bash: sudo: command not found
root@c3bfdf5922ea:~# sudo docker container kill 1
bash: sudo: command not found
root@c3bfdf5922ea:~# docker container kill 0
bash: docker: command not found
root@c3bfdf5922ea:~# sudo docker container kill 0
bash: sudo: command not found
root@c3bfdf5922ea:~# quit
bash: quit: command not found
root@c3bfdf5922ea:~# quit()
>
> sudo docker container kill
bash: syntax error near unexpected token `sudo'
编辑:对于问题 2,我按下了 control + d 并意外地回到了原始的 ubuntu 终端。是的。但是尝试终止 ubuntu 容器时仍然没有成功。以下是我尝试的方法。
root@c3bfdf5922ea:~# exit
:~$ docker container kill 0
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/0/kill?signal=KILL: dial unix /var/run/docker.sock: connect: permission denied
:~$ sudo docker container kill 0
[sudo] password for devel:
Error response from daemon: Cannot kill container: 0: No such container: 0
:~$ sudo docker container kill 1
Error response from daemon: Cannot kill container: 1: No such container: 1
:~$ sudo docker container kill
"docker container kill" requires at least 1 argument.
See 'docker container kill --help'.
Usage: docker container kill [OPTIONS] CONTAINER [CONTAINER...]
Kill one or more running containers
:~$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 775349758637 3 days ago 64.2MB
hello-world latest fce289e99eb9 10 months ago 1.84kB
:~$ sudo docker container kill 775349758637
Error response from daemon: Cannot kill container: 775349758637: No such container: 775349758637
再次编辑:对于问题 1,我尝试使用 $USER 命令,但没有成功。对于问题 2,我尝试使用 sudo docker container ls -all 命令,我猜测 root 后面的数字是容器 ID,然后再次尝试,但仍然没有成功。
:~$ sudo docker container ls -all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c3bfdf5922ea ubuntu "bash" 33 minutes ago Exited (0) 11 minutes ago adoring_villani
更多试验:
:~$ sudo usermod -aG docker $USER
:~$ docker container run -it ubuntu bash
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
:~$ sudo docker container run -it ubuntu bash
root@ff9c3f3e1a2c:/# sudo docker container kill ff9c3f3e1a2c
bash: sudo: command not found
root@ff9c3f3e1a2c:/# docker container kill ff9c3f3e1a2c
bash: docker: command not found
root@ff9c3f3e1a2c:/#
答案1
镜像 ID 与容器 ID 不同。使用以下docker ps
命令列出容器:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
841eff335225 ubuntu "bash" 4 seconds ago Exited (0) 2 seconds ago myubuntu
(-a
还列出已退出的容器)
在大多数 docker 命令中,您可以使用 id ( 841eff335225
) 或 name ( myubuntu
)。id 本身是容器“长 id”的开头(任何长度都可以,但短长度可能会产生歧义,6+ 通常就足够了)。
--name <somename>
您可以使用命令为容器指定一个名称(必须是唯一的)docker run
。否则容器将获得一个随机名称(形容词+科学/计算机名人)。
笔记
- 当然应该使用docker命令外部容器...所以在杀死它之前退出容器,或者从另一个终端杀死它。
docker ps -q
仅返回 id,因此可用于生成其他 Docker 命令的参数:docker kill $(docker ps -q)
将终止所有正在运行的容器。