新增:《Docker设置网络代理》

This commit is contained in:
2022-10-31 23:31:45 +08:00
parent ad01e7e8c4
commit 5a94a7f83f
6 changed files with 141 additions and 10 deletions

View File

@@ -53,7 +53,9 @@ docker run -d \
--restart=always \
-p 18500:8500 \
-v /opt/disk/docker/volumes/consul/conf:/consul/conf \
-v /opt/disk/docker/volumes/consul/data:/consul/data
-v /opt/disk/docker/volumes/consul/data:/consul/data \
# 使用该参数,容器内的 root 用户才拥有真正的 root 权限
--privileged=true
```
## 验证
@@ -78,6 +80,7 @@ services:
volumes:
- /opt/disk/docker/volumes/consul/conf:/consul/conf
- /opt/disk/docker/volumes/consul/data:/consul/data
privileged: true
```
编写好 docker-compose.yml 脚本后,在脚本同级目录执行下方命令即可。

View File

@@ -66,7 +66,9 @@ docker run -d \
-e LDAP_TLS_VERIFY_CLIENT=try \
-p 389:389 -p 636:636 \
-v /opt/disk/docker/volumes/openldap/conf:/etc/ldap/slapd.d \
-v /opt/disk/docker/volumes/openldap/data:/var/lib/ldap
-v /opt/disk/docker/volumes/openldap/data:/var/lib/ldap \
# 使用该参数,容器内的 root 用户才拥有真正的 root 权限
--privileged=true
```
## 验证
@@ -91,9 +93,9 @@ services:
image: osixia/openldap:1.5.0
restart: always
environment:
LDAP_ORGANISATION: baidu
LDAP_DOMAIN: baidu.com
LDAP_ADMIN_PASSWORD: 123456
LDAP_ORGANISATION: dcits
LDAP_DOMAIN: fucloud.net
LDAP_ADMIN_PASSWORD: dcits1991!
LDAP_TLS_VERIFY_CLIENT: try
ports:
- 389:389
@@ -101,6 +103,7 @@ services:
volumes:
- /opt/disk/docker/volumes/openldap/conf:/etc/ldap/slapd.d
- /opt/disk/docker/volumes/openldap/data:/var/lib/ldap
privileged: true
```
编写好 docker-compose.yml 脚本后,在脚本同级目录执行下方命令即可。

View File

@@ -40,7 +40,7 @@ Java 环境是配置好的,那还得是看脚本自身的问题了。其实,
Java 启动脚本内容······
```
## 解决方案
## 解决方案1
既然以往的经验不能提供帮助,那就对症下药,提示说找不到 java 命令,那说明它识别不到 Java 环境配置,帮它一把就得了呗。复制一份 Java 环境配置,放在脚本内容前,相当于每次执行这个脚本的时候,先做一次临时环境配置。
@@ -50,8 +50,42 @@ Java 启动脚本内容······
```shell
#!/bin/bash
JAVA_HOME=/usr/local/java/jdk1.8.0_202 # 如果你要使用,记得替换为你自己实际的 JDK 安装路径
export PATH=$PATH:$JAVA_HOME/bin
JAVA_HOME=/opt/disk/java/jdk1.8.0_202 # 如果你要使用,记得替换为你自己实际的 JDK 安装路径
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
Java 启动脚本内容······
```
## 解决方案2
这个问题的根源,其实是因为 `/etc/profile` 或者 `/etc/security/limit.d` 这些文件中配置的环境变量仅对通过 pam 登录的用户生效systemd 系统服务是不读这些配置的,所以这就造成登录到终端时查看环境变量和手动启动应用都一切正常,但是系统服务无法正常启动应用。
所以,如果想让 systemd 系统服务使用环境变量也可以在编写的服务内指定好环境变量。
```shell
[Unit]
Description=xxx
Wants=network-online.target
After=network-online.target
[Service]
# 如果你要使用,记得替换为你自己实际的 JDK 安装路径
Environment="JAVA_HOME=/opt/disk/java/jdk1.8.0_202"
Environment="CLASSPATH=.:$JAVA_HOME/lib.tools.jar"
Environment="PATH=$JAVA_HOME/bin:$PATH"
ExecStart=/bin/bash /opt/disk/xxx/start-schedule.sh
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target
```
修改完系统服务,别忘了重新加载和重新启动。
```shell
systemctl daemon-reload
systemctl restart xxx
```

View File

@@ -0,0 +1,88 @@
---
title: Docker 设置网络代理
author: 查尔斯
date: 2022/10/29 19:50
categories:
- Bug万象集
tags:
- Docker
- Linux
- CentOS
- 网络代理
---
# Docker 设置网络代理
## 问题描述
**C** 今天笔者在公司的一台内网服务器上,打算用 docker-compose 拉起一套开发环境。结果刚回车完命令就报错了。
```shell
docker-compose up -d
```
![202210291930211](../../../../../public/img/2022/10/29/202210291930211.png)
```
Error response from daemon: Get "https://registry-1.docker.io/v2/": x509: certificate signed by unknown authority
```
然后笔者又试了试 `docker pull``docker search` 这些命令,也都报这个错误。
## 原因分析
从报错提示上来看的话,笔者有两个怀疑的可能性:
1. SSL 证书的问题
2. 网络问题
第 1 个怀疑主要是因为后面的提示部分certificate signed by unknown authority而且简单去搜了一下确实有一些解决方案是冲着这个点解决的。
第 2 个怀疑主要是因为前面的提示部分Error response from daemon前文已经提过了这是一台内网机器内网机器这个身份基本可以表明它本身是没有网络的能上网也是因为设置了网络代理的原因。而且笔者之前也记录过一个问题那个问题产生的原因就是系统服务不会识别 `/etc/profile` 中设置的环境变量docker 也是一种系统服务,所以这让笔者更倾向于是这种可能。
## 解决方案
既然有过类似的经验,那肯定就按之前的经验先操作一下试试。
::: tip 笔者说
摊牌吧,两种可能,笔者都搜了。但笔者太懒了,看了看第 1 种可能的解决方案步骤,实在懒得去操作试试。所以又去简单搜了一下 Docker 网络代理的设置,意外发现它的解决方案和笔者刚才提到记录过的问题解决方案一样,这也让笔者确定了问题的原因。
:::
首先,停止 docker 服务。
```shell
systemctl stop docker
```
然后,创建 docker 服务目录,并创建 HTTP 代理配置文件。
```shell
mkdir -p /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/http-proxy.conf
```
将下方配置贴到 HTTP 代理配置文件中,是的没错,就是添加了两个环境变量,这两个环境变量在 `/etc/profile` 中也设置过,详情见之前笔者记录过的一篇设置网络代理的文章。
```shell
[Service]
Environment="HTTP_PROXY=http://用户名:密码@你的代理服务器地址:你的代理服务器端口号"
Environment="HTTPS_PROXY=http://用户名:密码@你的代理服务器地址:你的代理服务器端口号"
```
最后,重新加载服务配置,重启服务。
```shell
systemctl daemon-reload
systemctl restart docker
```
OK再执行 docker 命令就没问题了。
## 参考资料
1. Control Docker with systemd#Custom Docker daemon options 之 HTTP/HTTPS proxyhttps://docs.docker.com/config/daemon/systemd/#httphttps-proxy
::: tip 笔者说
这里提一下,官方文档真的很香。
:::

View File

@@ -65,6 +65,8 @@ docker run -d \
--collation-server=utf8mb4_general_ci \
--explicit_defaults_for_timestamp=true \
--lower_case_table_names=1
# 使用该参数,容器内的 root 用户才拥有真正的 root 权限
--privileged=true
```
## 验证
@@ -83,7 +85,7 @@ services:
image: mysql:8.0.29
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
MYSQL_ROOT_PASSWORD: dcits_cmp_mysql_001!!!
ports:
- 13307:3306
volumes:
@@ -91,12 +93,13 @@ services:
- /opt/disk/docker/volumes/mysql/data:/var/lib/mysql
- /opt/disk/docker/volumes/mysql/logs:/logs
command:
# 将 MySQL 8.0 默认密码策略修改为原来策略 (MySQL 8.0 对其默认策略做了更改会导致密码无法匹配)
# 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
privileged: true
```
编写好 docker-compose.yml 脚本后,在脚本同级目录执行下方命令即可。

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB