Lamirs ☆ Blog

分享技术小站

上一级页面:index-wsl

前置工作

下文将其称为Docker for Linux,安装文档见Docker install

安装与配置 Docker for Linux

这种方式是原生Linux的,下文将其称为Docker for Linux,安装过程见

官方文档:Docker install

推荐看这篇教程,写的很好Ubuntu - Docker — 从入门到实践 (gitbook.io)

安装

看官网文档:https://docs.docker.com/engine/install/ubuntu/#install-using-the-convenience-script

推荐看这篇教程,写的很好Ubuntu - Docker — 从入门到实践 (gitbook.io)

以Ubuntu为例:

由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书。

1
2
3
4
5
6
7
8
$ sudo apt-get update

$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release

然后使用官方脚本

使用脚本自动安装

在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,Ubuntu 系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装:

若你想安装测试版的 Docker, 请从 test.docker.com 获取脚本

1
2
3
4
5
# $ curl -fsSL test.docker.com -o get-docker.sh
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
# $ sudo sh get-docker.sh --mirror Aliyun
# $ sudo sh get-docker.sh --mirror AzureChinaCloud

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 的稳定(stable)版本安装在系统中。

安装过后,怎么查看Docker for Linux安装在哪

在终端里面执行df -Th,会发现增加了一些新的与docker有关的挂载点。

可以手动启动docker服务,输入命令:service docker start即可。

取消 service docker start 需要密码的机制

使用 service docker start 命令时, 需要使用 sudo 来执行. 而 sudo 需要输入密码. 阻碍了我们自动化开启 Docker.

下面使用 sudoers 文件配置使该命令不需要输入密码.

  1. 创建 /etc/sudoers.d/docker 文件 (!注意文件不可包含符号 . 和符号 ~ ) 否则不会生效
1
sudo vi /etc/sudoers.d/docker
  1. 将以下内容写入 /etc/sudoers.d/docker
1
2
# 用户($USER)在所有计算机(ALL)下可以使用root(root)的身份权限且不需要输入密码(NOPASSWD)来运行/usr/sbin/service(`which service`), 且限定参数为docker和一个任意参数(如:start,stop,status)
echo "$USER ALL=(root) NOPASSWD: `which service` docker *" | sudo tee /etc/sudoers.d/docker
  1. 根据 sudoers 的推荐设置, 修改 /etc/sudoers.d/docker 的权限,
1
sudo chmod 0440 /etc/sudoers.d/docker

配置 Docker 自启动

实现 Docker for Linux自启动的方式有很多,下面介绍三种方式

  1. 配置使用 systemd

  2. 配置 ~/.bashrc 或者 /etc/profile 等文件

2.1 直接添加启动代码到 .bashrc 中, 每次启动终端都会运行一次, 比较多余.

1
echo "sudo service docker start" | tee -a ~/.bashrc >/dev/null

2.2 直接添加启动代码到 /etc/profile 中, 启动 WSL 时运行一次, 稍显合理.

1
echo "sudo service docker start" | tee -a /etc/profile >/dev/null

2.3 保持 /etc/profle 无污染,加启动代码加到 /etc/profile.d/docker.sh中. bash 会在读取 /etc/profile 时自动加载 profile.d 下面的文件

1
2
3
4
# echo "service docker start" | tee -a ~/.bashrc >/dev/null
sudo touch /etc/profile.d/docker-start.sh && \
chmod 644 /etc/profile.d/docker-start.sh && \
echo "sudo service docker start" | tee -a /etc/profile.d/docker-start.sh >/dev/null

上一级页面:index-wsl

其中一种是原生Linux的,下文将其称为Docker for Linux,安装见Docker install

前置工作

首先需要更改默认的iptable,这是因为wsl2不支持iptable-nft,改为使用传统的iptable

docker无法在wsl2的ubuntu2004启动的问题

安装与配置 Docker for Linux

这种方式是原生Linux的,下文将其称为Docker for Linux,安装过程见Docker install

推荐看这篇教程Ubuntu - Docker — 从入门到实践 (gitbook.io)

安装过程见安装-docker-for-liunx

dokcer在wsl下的运行机制

原生linux安装docker方式和wsl2安装docker类似,区别在于WSL2下的linux不支持systemd。

在此linux机器下执行docker命令(docker命令为docker客户端),实质为客户端通过挂载的/var/run/docker.sock文件与windows里面的dockerd服务端进程通信。

如下图,我们在linux下重新启动linux下dockerd进程,linux模式下下载的busybox镜像又可以看到了,/var/run/docker.sock的时间戳也被更新了,

此时客户端通过/var/run/docker.sock文件与linux下的dockerd服务端通信。

可以手动启动docker服务,输入命令:service docker start即可。

WSL2怎么查看Docker for Linux安装在哪

  • 在WSL2里面执行df -Th,会发现增加了一些新的与docker有关的挂载点。

取消 service docker start 需要密码的机制

使用 service docker start 命令时, 需要使用 sudo 来执行. 而 sudo 需要输入密码. 阻碍了我们自动化开启 Docker.

下面使用 sudoers 文件配置使该命令不需要输入密码.

  1. 创建 /etc/sudoers.d/docker 文件 (!注意文件不可包含符号 . 和符号 ~ ) 否则不会生效
1
sudo vi /etc/sudoers.d/docker
  1. 将以下内容写入 /etc/sudoers.d/docker
1
2
# 用户($USER)在所有计算机(ALL)下可以使用root(root)的身份权限且不需要输入密码(NOPASSWD)来运行/usr/sbin/service(`which service`), 且限定参数为docker和一个任意参数(如:start,stop,status)
echo "$USER ALL=(root) NOPASSWD: `which service` docker *" | sudo tee /etc/sudoers.d/docker
  1. 根据 sudoers 的推荐设置, 修改 /etc/sudoers.d/docker 的权限,
1
sudo chmod 0440 /etc/sudoers.d/docker

配置 Docker 自启动

实现 Docker for Linux自启动的方式有很多,下面介绍三种方式

  1. 配置使用 systemd

    因为本身 WSL 没有使用 systemd 管理服务, 我也没有选择这种方式. 如需了解, 请参阅: https://github.com/microsoft/WSL2-Linux-Kernel/issues/30

  2. 配置 ~/.bashrc 或者 /etc/profile 等文件

2.1 直接添加启动代码到 .bashrc 中, 每次启动终端都会运行一次, 比较多余.

1
echo "sudo service docker start" | tee -a ~/.bashrc >/dev/null

2.2 直接添加启动代码到 /etc/profile 中, 启动 WSL 时运行一次, 稍显合理.

1
echo "sudo service docker start" | tee -a /etc/profile >/dev/null

2.3 保持 /etc/profle 无污染,加启动代码加到 /etc/profile.d/docker.sh中. bash 会在读取 /etc/profile 时自动加载 profile.d 下面的文件

1
2
3
4
# echo "service docker start" | tee -a ~/.bashrc >/dev/null
sudo touch /etc/profile.d/docker-start.sh && \
chmod 644 /etc/profile.d/docker-start.sh && \
echo "sudo service docker start" | tee -a /etc/profile.d/docker-start.sh >/dev/null

使用上面 3 种方式, 都可以使我们打开 WSL 时自动运行 Docker.

在开机之后, Docker 不会自动运行. 如果有服务依赖 Docker 的话, 我们仍需要手动打开 WSL.

建议使用下面介绍的方式.

wsl配置docker自启动

  1. 使用 Windows 的 任务计划

使用 Windows 的任务计划, 实现 Windows 开机之后自动执行 WSL 并使用命令启动 Docker 守护程序. 这样开机之后 Docker 便自动运行. 我们不需要再操心开启 Docker.

3.1 打开 task scheduler

task-scheduler

3.2 创建新task

create-task

3.3 设置Task

create-task-general

create-task-trigger

create-task-action

create-task-condition

上一级页面:index-wsl

前言

在Deepin下运行Python的pyopengl库的时候,会莫名其妙的出现如下错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
X Error of failed request: GLXBadContext
Major opcode of failed request: 156 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request: 49
Current serial number in output stream: 48
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 156 (GLX)
Minor opcode of failed request: 24 (X_GLXCreateNewContext)
Value in failed request: 0x0
Serial number of failed request: 48
Current serial number in output stream: 49
阅读全文 »
0%