【山竹记账】搭建docker开发环境


大纲链接 §

[TOC]


1. 环境

环境主要分两种:生产环境 和 开发环境 兼容 Windows 11macOSLinux

生产环境

  • 一般使用 Linux 服务器(包括买云服务器)
  • 关闭 debug 端口
  • 使用 log 日志进行排错
  • 环境变量 举例:RAILS_ENV=production
  • 编辑器: vivimneovim
  • Shellbash 或者 sh

开发环境

  • 一般使用 Windows 或者 macOS
  • 开启 debug 端口
  • 使用 log 或者断点进行排错
  • 环境变量 一般不设置,默认:development
  • 编辑器: VSCode(直连Docker) 或 JetBrains(无法直连Docker
  • Shellzsh 或者 fish

生产环境 与 开发环境 系统不一致导致的 bug

  • 缺少依赖库
  • API不兼容

为了减少环境不一致带来的bug,确保每个开发运维人员生产环境和开发环境一致,需要使用 Docker,保证环境一致

Docker 优缺点对比

优点:

  • 在所有地方(操作系统)使用同一套环境
    • Windows 里运行 Linux 容器,开启 WSL2
    • macOS 里运行 Linux 容器
    • Linux 里运行 Linux 容器

缺点:

  • 学习门槛较高
    • 需要会 Linux 命令
    • 需要了解容器的概念
    • 需要做端口映射
    • 需要做数据卷映射
  • 占用内存和硬盘

2. Docker知识归纳

1
2
3
4
5
6
7
8
9
graph TB
    A[DockerFile: FROM RUN ADD ENV] --> | docker build . -t xxx | B(image 镜像)
    B --> |docker run -dit xxx| C([container 容器])
    C --> |docker exec -it yyy zsh| D(("
      Linux 系统
      bash
      node...
    "))
    B --> |docker push| H(Docker Hub)

3. 使用Docker的准备工作

各个操作系统的基本要求

  • Win11 开启 WSL
  • macOS 版本 10.15+,不可安装 VirtualBox
  • Linux 内核 3.10+

win11 开启 WSL2

  1. 控制面板\所有控制面板项\程序和功能 点击 启用或关闭Windows功能,勾选 Hyper-VWindows拟机监控程序平台适用于Linux的Windows子系统,确认并重启
  2. 家庭版开启 Hyper-V 需额外设置
  3. Windows 11 安装 WSL2,启动终端或打开Power Shell 以管理员命令输入下方代码: bcdedit /set hypervisorlaunchtype auto
  4. 使用 PowerShell,以管理员权限启动,输入下方命令执行:wsl --install -d Ubuntu,需要重启计算机
  5. 系统登录,设置默认账户和密码,该账户默认为该Linux系统的管理员,具备和root相同的权限。(root已经有了不能起重复的账户名)
  6. 升级WSL内核:wsl --update
  7. 重启WSL内核:wsl -l -shutdown
  8. 查看本系统WSL情况:wsl -l -v
  9. Ubuntu命令行中,升级Linux系统的包:sudo apt update && sudo apt upgrade
  10. 查看可用发行版列表:wsl --list --online / wsl -l -o
  11. 更改默认安装的 Linux 发行版:wsl --install -d <Distribution Name>
  12. 如果要通过 Linux/Bash 命令行(而不是通过 PowerShell 或命令提示符)安装其他发行版,必须在命令中使用 .exe:wsl.exe --install -d <Distribution Name> 或若要列出可用发行版,则使用:wsl.exe -l -o
  13. 使用 wsl --install 命令安装的新 Linux 安装将默认设置为 WSL 2,无需额外设置:wsl --set-default-version 2
  14. 在终端启动运行,ubuntu.exeubuntuwsl.exe
  15. 查看当前目录路径在 WSL 中的装载位置:wsl pwd
  16. 如果已在 Windows 提示符或 PowerShell 窗口中打开 WSL 命令行并想退出,请输入命令:exit

参考


安装Docker最新版客户端


Docker加速

配置 docker.desktop@v4.89.0 docker@29.7.2Docker Engine

  • Configure the Docker daemon by typing a JSON Docker daemon

设置Docker Engine国内镜像地址

  • 启动 Docker Desktop,在设置中找到 Docker Engine
  • 修改 daemon.json

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    {
    "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
    },
    "debug": false,
    "experimental": false,
    "insecure-registries": [
    "docker.mirrors.ustc.edu.cn"
    ],
    "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://o3b9ba2s.mirror.aliyuncs.com",
    "https://reg-mirror.qiniu.com",
    "https://hub-mirror.c.163.com"
    ]
    }
  • Docker 镜像加速

  • 检查加速器是否生效,运行命令 docker info


安装Visual Studio Code最新版

  • 安装 Remote - Containers Dev Containers 插件

尝试使用Docker镜像,创建容器

创建 Dockerfile

尝试使用 Dockerfile 创建容器

  • 在工作目录中新建 docker-test 目录,新建 .devcontainer 目录
  • 新建名为 Dockerfile 的文件,无后缀
  • 使用Docker Hub上开源的镜像,在 Dockerfile 文件中写入 FROM frankfang128/oh-my-docker:latest
  • Ctrl + Shift + P,键入 Reopen in Container
  • 在弹出的选项中点击第二项 From 'Dockerfile'
  • VSCode自动重新启动,并运行一个 container
  • 等到全部安装成功后,点击终端的+,打开一个zsh,输入以下命令
    • 查看路径 pwd
    • 查看版本 node -v;pnpm -v;npm -v;yarn -v
  • 创建 .devcontainer/devcontainer.json

devcontainer.json配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// For format details, see https://aka.ms/devcontainer.json.
// For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.194.0/containers/docker-existing-dockerfile
{
  "name": "OhMyEnv",
  "context": "..",
  "dockerFile": "./Dockerfile",
  "settings": {},
  "extensions": [
    "golang.go",
    "dbaeumer.vscode-eslint",
    "esbenp.prettier-vscode",
    "rebornix.ruby",
    "castwide.solargraph",
    "kaiwood.endwise",
    "sianglim.slim",
    "jnbt.vscode-rufo"
  ],
  "runArgs": [
    "--privileged",
    // 如果你用的是长城宽带,在遇到网络不通的时候,可以删掉这一行
    // "--dns=114.114.114.114",
    "--network=network1"
  ],
  "containerEnv": {
    "DISPLAY": "host.docker.internal:0.0"
  },
  // 持久化数据
  // 修改之前请看一下上面内容是否已经包含你需要的挂载
  // 重复挂载将导致容器启动失败!
  "mounts": [
    "source=docker,target=/var/lib/docker,type=volume",
    "source=config,target=/root/.config,type=volume",
    "source=vscode-extensions,target=/root/.vscode-server/extensions,type=volume",
    "source=ssh,target=/root/.ssh,type=volume",
    "source=go-bin,target=/root/go/bin,type=volume",
    "source=pnpm-bin,target=/root/.local/share/pnpm,type=volume",
    "source=gems,target=/usr/local/rvm/gems,type=volume",
    "source=repos,target=/root/repos,type=volume"
  ],
  // Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root.
  // "shutdownAction": "none",
  "remoteUser": "root",
  // "overrideCommand": false,
  // "forwardPorts": [],
  // "postCreateCommand": "apt-get update && apt-get install -y curl",
  "postStartCommand": "nohup bash -c '/usr/sbin/dockerd &> /var/log/dockerd.log &' &> /dev/null"
}

workspace中新建项目文件夹

  • 最外层新建 node-demos 文件夹
  • VSCode菜单选项中,打开文件夹,默认在/workspaces/中,点击下一级
  • 会把新建的都映射到windows目录中

区分是VSCode直接打开的项目 或 使用容器打开的项目

  • 容器打开的项目名后跟着 [开发容器:EXISTING DOCKERFILE][DEV CONTAINER:EXISTING DOCKERFILE]

使用 oh-my-env 模板代码

下载oh-my-env

oh-my-env github开源代码

  • git clone git@github.com:FrankFang/oh-my-env-1.git,下载后删除 .git,使用 VSCode 打开
  • Ctrl + Shift + P 输入 reopen in container 选择该选项后进入自动构建 Linux 镜像,等待
  • 可以关闭 第一个终端 ‘开发者容器’,也可以开着看日志
  • 点击 + 打开新终端,进入已经配置好的 zsh 终端环境
  • 在终端输入 pwd 查看当前目录 /workspaces/oh-my-env-2,说明已经进入了一个 Linux 环境
  • 在终端输入 uname -a 查看当前 Linux 环境版本信息
  • 在终端输入 echo $0 查看 Shell 信息 /bin/zsh

    1
    2
    3
    4
    5
    6
    
    pwd
    # 当前系统信息
    uname -a
    # 读取当前用户名
    whoami
    echo $0

oh-my-env 检查已安装软件版本

在终端输入

  • rvm --version 查看为 rvm 1.29.12
  • 激活 ruby 输入命令: rvm use 3,可以看到 Using /usr/local/rvm/gems/ruby-3.0.0
  • ruby --version 版本为 ruby 3.0.0p0
  • bundle --version 版本为 Bundler version 2.2.3
  • irb --version 版本为 irb 1.3.0
  • gem --version 版本为 3.2.3
  • VSCode 版本 code --version
  • git --version

node 相关

  • nvm --version 查看为 0.39.1
  • 安装 node@20nvm install 20.19.1,使用 nvm use 20.19.1
  • npm --version
  • yarn --version
  • pnpm --version

重新打开 oh-my-env 环境

可以关闭后,再打开,注意查看最近项目 xxx [开发容器]

  • 可以打开容器项目文件,reopen 容器 oh-my-env
  • 也可以打开新窗口,在最近列表中找到带有 xxx [开发容器] 的项目打开

查看 oh-my-env.devcontainer/Dockerfile

  • 山竹记账的镜像 FROM frankfang128/oh-my-docker:mangosteen

新版 .devcontainer/devcontainer.json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
{
  "name": "OhMyEnv",
  "context": "..",
  "dockerFile": "./Dockerfile",
  "customizations": {
    "vscode": {
      "settings": {},
      "extensions": [
        "streetsidesoftware.code-spell-checker",
        "golang.go",
        "Shopify.ruby-lsp",
        "testdouble.vscode-standard-ruby",
        "sorbet.sorbet-vscode-extension",
        "dbaeumer.vscode-eslint",
        "esbenp.prettier-vscode",
        "castwide.solargraph",
        "kaiwood.endwise",
        "sianglim.slim",
        "jnbt.vscode-rufo",
        "Vue.volar",
        "mtxr.sqltools"
      ]
    }
  },
  "runArgs": [
    "--privileged",
    "--network=network1"
  ],
  "containerEnv": {
    "DISPLAY": "host.docker.internal:0.0"
  },
  "mounts": [
    "source=docker,target=/var/lib/docker,type=volume",
    "source=config,target=/root/.config,type=volume",
    "source=vscode-extensions,target=/root/.vscode-server/extensions,type=volume",
    "source=ssh,target=/root/.ssh,type=volume",
    "source=go-bin,target=/root/go/bin,type=volume",
    "source=pnpm-bin,target=/root/.local/share/pnpm,type=volume",
    "source=gems,target=/usr/local/rvm/gems,type=volume",
    "source=repos,target=/root/repos,type=volume"
  ],
  "remoteUser": "root",
  "postStartCommand": "nohup bash -c '/usr/sbin/dockerd &> /var/log/dockerd.log &' &> /dev/null"
}

小结

  • 各个操作系统的基本要求
    • Win11 开启 WSL
    • macOS 版本 10.15+,不可安装 VirtualBox
    • Linux 内核 3.10+
  • Docker 加速
  • 安装 VSCode
    • 安装 Dev Containers 插件
  • 安装 Docker DeskTop 客户端
  • 直接使用模板代码 oh-my-env
    • 下载后删除 .git 使用
    • Docker 安装成功后,请在命令行运行 docker network create network1 以防报错
    • 输入 reopen in container 回车
  • 测试命令是否可用
    • 新建终端,输入版本检查命令
    • 确保 rubybundleirbnodenpm 等命令可用

4. oh-my-env 环境说明

oh-my-env 工作空间

  • oh-my-env 会自动映射为 workspaces/oh-my-env
    • 该目录里的文件是本地系统和容器 内外共享
    • ntfs 系统格式,性能一般
    • temp 目录可作为文件中转,实时更新,有时需要手动点击刷新
  • 提前另外准备好了 ~/repos 目录,该目录是 容器专属 的,性能较好
    • 默认会在 ~/repos 中工作,存放各个项目代码
    • 需要共享时才会用到 workspaces/oh-my-env/temp 目录
    • cd ~/repos 或者 cd root/repos
    • docker deskop 的数据卷中可以查看

oh-my-env 持久化

  • Ctrl + Shift + P 弹出框内输入 rebuild container 相当于 重装Linux系统
  • 重新构建镜像后,未持久化的目录都会被删除
  • 只有写在 mounts 配置中的目录和 oh-my-env 目录(容器外系统可访问)会被保留
    • 会被持久化到数据卷中,不会随容器重启或重建而消失

.devcontainer/devcontainer.json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
  "//...": "",
  "mounts": [
    "source=docker,target=/var/lib/docker,type=volume",
    "source=config,target=/root/.config,type=volume",
    "source=vscode-extensions,target=/root/.vscode-server/extensions,type=volume",
    "source=ssh,target=/root/.ssh,type=volume",
    "source=go-bin,target=/root/go/bin,type=volume",
    "source=pnpm-bin,target=/root/.local/share/pnpm,type=volume",
    "source=gems,target=/usr/local/rvm/gems,type=volume",
    "source=repos,target=/root/repos,type=volume"
  ],
  "//...": ""
}
  • 需要自定义持久化的,也可以添加到 mounts
  • 修改之前请看一下上面内容是否已经包含你需要的挂载
  • 重复挂载将导致容器启动失败

主要使用的持久化的工作目录

  • ~/repos 供容器内部系统使用
  • /workspaces/oh-my-env2 供容器内外系统中转数据使用

oh-my-env 环境功能

现有功能

  • archlinux
  • zsh 已配置终端,相当于 bash
  • fzf 索引当前目录下所有文件,可模糊查找,只可以找到文件目录路径,该命令无法打开
    • 使用自定义脚本,操作打开目录或者文件 vi ~/.bashrc
    • 命令 fd 打开文件所在的目录
    • 命令 f 使用默认的 editor 打开文件
    • 命令 j 会用 fzf 打开所有打开过的目录,可快速查找,回车可进入该目录
    • 命令 jj 反悔重新查找
  • rvm + ruby + gem + bundle
  • nvm + node + pnpm
  • go
  • git
  • vscode
  • 各种国内加速
  • 其他多余的已删除
    • neovim
  • docker in docker(dockerd)
    • 使用命令 dockerd 来启动
    • 新打开一个终端,输入 docker ps 查看运行的镜像
    • 可运行 docker run hello-world 成功显示 Hello from Docker!
    • chezmoi 可管理所有配置

如何自定义

如何让容器与宿主机共享 ssh 认证信息


5.新建项目示例

  • 运行容器后,cd ~/reposcd /root/repos 或使用 j 命令查找
  • 运行 code . 在当前目录下开发
  • 创建新目录 mkdir xxx,之后 code xxx
  • 删除项目目录,先cd .. 到上一级,再rm -rf xxx删除,会自动关闭对应 Linux 目录

步骤小结

  • 创建目录
    • mkdir ~/repos/hello
    • code ~/repos/hello
  • 切换窗口
    • 关闭 oh-my-env 窗口
    • 使用 hello 窗口
  • 原则
    • 每次只打开一个目录
    • 不要一次打开很多目录,会卡

6.VSCode 端口转发

  • 由于开启了 windows 中的 Linux 子系统,实现自动映射端口

测试 在容器项目目录中创建 server.js

1
2
3
4
5
6
7
8
const http = require('http')
const handler = function (req, res) {
  res.end('Hello, World!')
}
 const server = http.createServer(handler)
server.listen(3000, function () {
  console.log('请访问 http:127.0.0.1:3000')
})

运行 node server.js

  • 在终端点击跳转网页,可以看到 Hello, World!
  • VSCode 提示端口窗口,如果网页中没有显示,则可以在端口删除原来的后重新添加 3000 端口,再刷新

说明

  • 实际上需要监听的是 Linux3000端口,windows 本地并没有
  • VSCode 检测到dockerLinux3000端口,自动在 windows 中做一个映射

docker 容器开启 github443 端口

  • 打开 Ubantu 命令行
  • 运行以下命令行

    1
    2
    3
    
    sudo apt-get update
    sudo apt-get install -y iputils-ping
    sudo sudo apt install net-tools

7.高性能文件: docker volume

在容器项目中运行 mkdir aaa;touch aaa/frank.txt

  • 发现需要手动刷新 VSCode 目录才能看到添加的文件/文件夹
  • docker 没有立即检测到文件变化

加速方法

  • docker desktop > Volumes中,新建一个 Docker volume,自定义命名
  • 相当于在命令行运行 docker volume create xxx
  • my-projects/.devcontainer/devcontainer.json 中改写 mounts

    1
    2
    3
    4
    5
    6
    7
    
    {
    "//xxx": "...",
    "mounts": [
    "source=刚才创建的volume的名字,target=${containerWorkspaceFolder}/high_speed_files,type=volume"
    ],
    "//...": "..."
    }
  • 在 VSCode 中运行 rebuild Container

  • 这样一来 high_speed_files 目录里的文件的性能就非常高了,名称可以任意

  • 相当于专门给docker使用的硬盘,提升文件性能,但 windows 中不能直接访问该文件/文件夹,需要导出 volume

  • 不过要记得经常把 volume 中的文件上传到 GitHub,不然你哪天不小心把 volume 删了,代码就彻底没了

参考


8.连接任意数据库

连接 MYSQL 步骤

  1. 创建 network1
  2. 启动 mysql1 server 容器服务,连入 network1
  3. oh-my-docker 连入 network1
  4. 预装 mysql 客户端镜像
  5. 重启重新构建容器 rebuild
  6. 验证连接 mysql -u root -h mysql1 -p

创建 network1

  • 打开 windows 终端(非容器内),运行命令 docker network create network1
  • 相当于组建了一个局域网 wifi,需要将mysql服务器和 docker连入该wifi
  • 如果报错,就换一个网络名称 network2

启动 mysql 镜像,得到数据库服务的容器

  • 搜索 docker hub mysql
    • mysql docker
    • windows终端中运行 docker run --name mysql1 -e MYSQL_ROOT_PASSWORD=123456 --network=network1 -d mysql:5.7.35
    • 说明:docker run --name 数据库名称 -e MYSQL_ROOT_PASSWORD=数据库密码 --network=需要连入的网络 -d mysql:数据库版本号
    • -d 表示 deamon

oh-my-docker 连入 network1

  • .devcontainer/devcontainer.json 配置中,确保写入以下配置

    1
    2
    3
    4
    5
    
    {
    "//xxx": "...",
    "runArgs": ["--network=network1"],
    "//...": "...",
    }
  • 写完保存后 Ctrl + Shift + p 选择 rebuild


预装 mysql 客户端软件

Dockerfile 中写入

1
2
3
FROM frankfang128/oh-my-docker:latest

RUN apk add mysql-client
  • 写完保存后 Ctrl + Shift + p 选择 rebuild

验证链接

  • mysql -u root -h mysql1 -p
  • 会提示输入密码

关机重启

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 显示所有容器
docker ps -a

# 启动服务
docker start mysql1

# 关机
docker stop mysql1

# 删除
docker rm mysql1

9.常用的 docker 命令一览表

  • docker ps 查看正在运行的容器
  • docker ps -a 查看运行过的容器
  • docker pull ubuntu:20.04 下载 ubuntu 镜像
  • docker pull myregistry.local:5000/testing/test-image:0.1 下载指定域名下的镜像
  • docker run --name test -dit alpine 由镜像得到容器(容器在后台运行),并把容器取名为 test
  • docker run alpine sh 由镜像得到容器,并运行 sh 命令(容器在当前终端运行)
  • docker run -p 9090:8080 -dit alpine 端口映射
  • docker run -e ENV1=foo -dit alpine 设置环境变量
  • docker run --network=xxx -dit alpine 设置网络
  • docker stop container_iddocker kill container_id 停止容器(二者区别见这里)
  • docker start container_id 开始运行容器
  • docker rm container_id 删除已停止运行的容器
  • docker rm -f container_id 强制删除容器,不管有没有在运行
  • docker rm $(docker ps --filter status=exited -q) 删除所有已停止运行的容器
  • docker rmi image_id 删除镜像
  • docker system prune 删除占用硬盘的垃圾对象,包括没用的 containerimagesnetwork
  • docker image prune -a 删除所有没被用到的镜像

10.配置git/github,创建.ssh 密钥

  • 已经预装,查看版本 git --version

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    cd ~
    git config --global user.name xmasuhai
    git config --global user.email xmasuhai@163.com
    git config --global push.default simple
    git config --global core.quotepath false
    git config --global core.editor "code --wait"
    git config --global core.autocrlf input
    
    # 生成ssh key
    ssh-keygen -t rsa -b 4096 -C "xmasuhai@163.com"
    # 查看并复制生成的密钥,填写到 GitHub SSH key
    cat ~/.ssh/id_rsa.pub
    # 测试是否配置
    ssh -T git@github.com
    # 备份
    cd ~/.ssh
    ll

确保 SSH agent service on Windows 服务正在运行

  • 在 docker 容器命令行zsh中 重新配置 .ssh 后,命令行提示 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  • 按照网络上提示删除提示信息中,对应的行数后,vscode 又警告无法连接到 local 主机 (\.\pipe\openssh-ssh-agent) 上的 ssh-agent。请确保服务正在运行。

    1
    2
    3
    4
    5
    6
    7
    8
    
    ssh-keyscan github.com
    
    github.com:22 SSH-2.0-babeld-dd067d10
    github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl
    # github.com:22 SSH-2.0-babeld-dd067d10
    github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=
    # github.com:22 SSH-2.0-babeld-dd067d10
    github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=

将新生成的公钥写入 known_hosts

1
ssh-keyscan github.com >> /root/.ssh/known_hosts

英语报错文字

1
Could not connect to ssh-agent on local host (\\.\pipe\openssh-ssh-agent). Make sure the service is running.

原因

  • SSH agent service on Windows is not running
  • Windows upgrade had for some reason disabled the ssh-agent service

解决步骤

  • 管理员打开 powershell

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    PS C:\Developer> ssh-agent
    unable to start ssh-agent service, error :1058
    
    PS C:\Developer> Get-Service ssh-agent
    Status   Name               DisplayName
    ------   ----               -----------
    Stopped  ssh-agent          OpenSSH Authentication Agent
    
    PS C:\Developer> Get-Service ssh-agent | Select StartType
    
    StartType
    ---------
    Disabled
  • 依次输入命令

    • Get-Service -Name ssh-agent | Set-Service -StartupType Manual
    • ssh-agent
    • Get-Service ssh-agent
  • 看到正在运行

    1
    2
    3
    
    Status   Name               DisplayName
    ------   ----               -----------
    Running  ssh-agent          OpenSSH Authentication Agent

参考

完整过程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
PS C:\Windows\system32>  Get-Service ssh-agent

Status   Name               DisplayName
------   ----               -----------
Stopped  ssh-agent          OpenSSH Authentication Agent


PS C:\Windows\system32> Get-Service ssh-agent | Select StartType

StartType
---------
 Disabled


PS C:\Windows\system32> Get-Service -Name ssh-agent | Set-Service -StartupType Manual
PS C:\Windows\system32> ssh-agent
PS C:\Windows\system32> Get-Service ssh-agent

Status   Name               DisplayName
------   ----               -----------
Running  ssh-agent          OpenSSH Authentication Agent


PS C:\Windows\system32> ssh-add -l
The agent has no identities.
PS C:\Windows\system32> ssh-agent
PS C:\Windows\system32>

避免每次需要重启服务,需要设置 ssh-agent 启动方式

ssh-agent


oh-my-env 工作流

初始工作配置各种文件:拷贝配置

-

工作目录操作

  • cd ~/repos 或者 cd /root/repos 或者 j repos
  • 使用 code xxx-project-name 打开新的 IDE 窗口,可以把旧的关了
  • 新建 mkdir xxx-project-name 在用 VSCode 打开
  • 删除 rm -rf xxx 容器自动清除数据卷

备份文件

  • 删除镜像,还原备份

·完待续·

参考文章

相关文章


  • 作者: Joel
  • 文章链接:
  • 版权声明
  • 非自由转载-非商用-非衍生-保持署名