[日常知识] - Docker 小问
Docker 代理相关
单纯修改 Shell 环境变量的方法无法使 docker 使用上代理,须为守护进程配置代理
推荐方式:
在 Docker Engine 23.0 及更高版本中,您还可以在 daemon.json
文件中为守护进程配置代理行为[1][2]:
{
"proxies": {
"http-proxy": "http://proxy.example.com:3128",
"https-proxy": "https://proxy.example.com:3129",
"no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"
}
}
Tabby 隧道不稳定
通过上述方法给 docker 配置好代理后采取了远程端口 ssh 连接的方式使用代理,但是使用 tabby 却断断续续的,导致 pull 失败,使用 finalshell 成功了。
docker ps 指定输出格式
很多时候 docker ps 时,展示可能会折行或者显示不下等,看着乱七八糟的
解决方案:使用 docker format 格式化搭配 less 分页展示
推荐使用 docker format 的方法,将下述函数写入 Shell 环境变量然后重登或 source
环境变量。
docker-ps() {
local format="table"
local columns=()
local show_all=false
# 解析参数
for arg in "$@"; do
case $arg in
-a)
show_all=true
;;
--all)
columns=("{{.ID}}" "{{.Image}}" "{{.Names}}" "{{.Status}}" "{{.Ports}}")
;;
--id)
columns+=("{{.ID}}")
;;
--image)
columns+=("{{.Image}}")
;;
--names)
columns+=("{{.Names}}")
;;
--status)
columns+=("{{.Status}}")
;;
--ports)
columns+=("{{.Ports}}")
;;
esac
done
# 如果没有指定列,使用默认列
if [ ${#columns[@]} -eq 0 ]; then
columns=("{{.ID}}" "{{.Image}}" "{{.Names}}" "{{.Status}}")
fi
# 构建格式字符串
local format_str="$format"
for col in "${columns[@]}"; do
format_str="$format_str\t$col"
done
# 执行 docker ps 命令并通过 less 分页显示
if [ "$show_all" = true ]; then
docker ps -a --format "$format_str" | less -S
else
docker ps --format "$format_str" | less -S
fi
}
参数说明
参数 | 说明 |
---|---|
-a |
显示所有容器(包括已停止的),等同于 docker ps -a 。 |
--all |
格式化显示所有列信息,包括 ID 、Image 、Names 、Status 和 Ports 。 |
--id |
仅显示容器的 ID 列。 |
--image |
仅显示容器使用的 Image 列。 |
--names |
仅显示容器的 Names 列。 |
--status |
仅显示容器的 Status 列。 |
--ports |
仅显示容器的 Ports 列。 |
默认行为
- 若不提供任何参数,函数将显示运行中容器的
ID
、Image
、Names
和Status
列。 - 若使用
-a
参数,将显示所有容器的ID
、Image
、Names
和Status
列。
评论区