Docker备忘
常用资料
安装
如上文档所说,在CentOs上安装Docker有三种方式: 使用repository(从项目源码),使用package(下载安装包),使用脚本.
我们简单点,使用脚本:
# 登录为xkyii
ssh xkyii@i.xkyii.cn
# 进入工作目录(非必须)
mkdir workspace
cd workspace
# 下载并运行脚本
# 等待安装完成,其中有部分脚本是静默的,不显示进度,网速不理想的需要点耐心.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 看下版本
docker -v
# 看下信息
docker info
安装之后
# 新建docker用户组
sudo groupadd docker
# 当前用户加入docker用户组
sudo usermod -aG docker $USER
# 切换到docker组
newgrp docker
常用
# 删除正在运行的容器
docker rm -f $(docker ps -q)
# 删除正在运行的容器 (含隐藏)
docker rm -f $(docker ps -qa)
# 删除所有未在运行的容器
docker container prune -f
使用代理 docker pull
- 可能的报错:
[djhc@localhost down]$ docker pull centos:centos8
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
- 如何优雅的给 Docker 配置网络代理, 这里说得比较清楚了
使用前面说的临时代理的方式是行不通的, 因为镜像的拉取和管理都是 docker daemon 的职责.
- 创建 dockerd 相关的 systemd 目录,这个目录下的配置将覆盖 dockerd 的默认配置
sudo mkdir -p /etc/systemd/system/docker.service.d
- 新建配置文件
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.1.38:7890"
Environment="HTTPS_PROXY=http://192.168.1.38:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
- 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
- 检查配置
sudo systemctl show --property=Environment docker
- 报错
sudo docker run hello-world
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: EOF
通常代表代理配置错误
使用clash时, HTTPS_PROXY的代理要注意:
# 是这个
Environment="HTTPS_PROXY=http://192.168.1.38:7890"
# 不是这个, 注意https
Environment="HTTPS_PROXY=https://192.168.1.38:7890"
免sudo
# 把USER加入到docker组
sudo usermod -aG docker $USER
# 立即生效(无需重启)
newgrp docker
运行arm64镜像
# 安装 qemu-user-static
sudo apt update
sudo apt install -y qemu-user-static binfmt-support
# 注册 QEMU 解释器(一次性)
sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
# 检查是否注册成功 (显示enabled)
cat /proc/sys/fs/binfmt_misc/qemu-aarch64
# 运行
docker run -it --rm --platform linux/arm64 centos:centos8 uname -p
服务
停止服务
sudo systemctl stop docker.service
# 会守护docker.service
sudo systemctl stop docker.socket
# 禁用自动启动
sudo systemctl disable docker
错误
Cannot connect to the Docker daemon.
docker服务没有启动
# 启动以下
service docker start
# 再看一下
docker info
https client
需要把私服的服务器加到docker的配置里面(insecure-registries这段):
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"insecure-registries": [ "http://192.168.1.53:8088"]
}
An attempt was made to access a socket in a way forbidden by its access permissions
Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:2399 -> 0.0.0.0:0: listen tcp 0.0.0.0:2399: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
- 关于Windows端口没被占用提示An attempt was made to access a socket in a way forbidden by its access permissions-CSDN博客
- 【已解决】bind: An attempt was made to access a socket in a way forbidden by its access permissions.-腾讯云开发者社区-腾讯云
# 查看端口范围
❯ netsh int ipv4 show dynamicport tcp
Protocol tcp Dynamic Port Range
---------------------------------
Start Port : 1024
Number of Ports : 64511
# 修改范围
❯ netsh int ipv4 set dynamicport tcp start=19999 num=32000
Ok.
# 再查看
❯ netsh int ipv4 show dynamicport tcp
Protocol tcp Dynamic Port Range
---------------------------------
Start Port : 19999
Number of Ports : 32000
重启
时区问题
- 参考Docker 时区调整方案
- 示例:
# 使用 ubuntu:20.04 作为基础镜像
FROM ubuntu:20.04
# 设置环境变量,避免安装过程中交互式提示
ENV DEBIAN_FRONTEND=noninteractive
# 编码
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
# 时区
ENV TZ=Asia/Shanghai
# 更新包列表并安装 build-essential 和 gdb
RUN apt-get update \
&& apt-get install -y openssl tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo ${TZ} > /etc/timezone \
&& dpkg-reconfigure --frontend noninteractive tzdata \
&& rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /workspace
# 默认命令
#CMD ["gdb"]
# 182.Arm64-编译
# docker buildx build --platform=linux/arm64/v8 --build-arg "HTTP_PROXY=http://192.168.1.38:7890/" --build-arg "HTTPS_PROXY=http://192.168.1.38:7890/" --build-arg "NO_PROXY=localhost,127.0.0.1" -t ubuntu-rt:20.04-arm64 -f ./Dockerfile .
打包镜像
打包
docker save mysql -o mysql.tar
加载
docker load -i mysql.tar