那些本身就自带的命令就不记了,只记一些没有内置指令的但常用的功能。

通过代理运行container内程序

在host上用代理运行一个程序,可以简单地在命令前面加上代理变量:

http_proxy=xxx curl google.com

但是用如下指令运行容器

http_proxy=xxx docker run tutum/curl curl google.com

容器内的程序并不会受代理影响(因为容器本身是一独立的os)
要想让容器内程序走代理,需用:

docker container run
-e HTTP_PROXY=http://username:password@proxy2.domain.com
-e HTTPS_PROXY=http://username:password@proxy2.domain.com
myimage

也可以定义docker client的配置文件~/.docker/config.json中,使之成为默认配置,不用每次运行时指定了:

1
2
3
4
5
6
7
8
9
10
{
"proxies":
{
"default":
{
"httpProxy": "http://127.0.0.1:3001",
"noProxy": "*.test.example.com,.example2.com"
}
}
}

参考:
https://stackoverflow.com/questions/47827496/how-to-configure-docker-container-proxy
https://docs.docker.com/network/proxy/#configure-the-docker-client

查看远端image的所有tag

参考:https://stackoverflow.com/questions/28320134/how-to-list-all-tags-for-a-docker-image-on-a-remote-registry#39454426

查看某容器的定义文件

简单的看:

docker history <IMAGE_ID>

仔细的看:

docker run --rm -v ‘/var/run/docker.sock:/var/run/docker.sock’ lukapeschke/dfa <IMAGE_ID>

ctrl-c不能退出正在运行的容器?怎么停止所有正在运行的容器?

如果一个命令卡住了,容器不退出,这时按ctrl-c也没用,因为没有为它分配终端,而响应ctrl-c退出其实是终端程序的功能
所以,启动时加上-t参数即可

docker run -t tutum/curl curl google.com

但是,带上-t后即使可以ctrl-c返回host终端了,容器本身还不会停止,必须用stop指令显式停止。
如果有多个容器卡住了,那怎么快速把它们都停止呢?docker并没有一个stopall指令或类似参数。
这时可以自己把正在运行中的容器查询出来,将其id发送给stop即可:

docker stop $(docker ps -q)

参考:https://github.com/moby/moby/issues/2838#issuecomment-330364056