新增:《Docker设置网络代理》
This commit is contained in:
@@ -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 脚本后,在脚本同级目录执行下方命令即可。
|
||||
|
@@ -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 脚本后,在脚本同级目录执行下方命令即可。
|
||||
|
@@ -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
|
||||
```
|
||||
|
||||
|
88
docs/categories/issues/2022/10/29/Docker设置网络代理.md
Normal file
88
docs/categories/issues/2022/10/29/Docker设置网络代理.md
Normal 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
|
||||
```
|
||||
|
||||

|
||||
|
||||
```
|
||||
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 proxy:https://docs.docker.com/config/daemon/systemd/#httphttps-proxy
|
||||
|
||||
::: tip 笔者说
|
||||
这里提一下,官方文档真的很香。
|
||||
:::
|
@@ -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 脚本后,在脚本同级目录执行下方命令即可。
|
||||
|
BIN
docs/public/img/2022/10/29/202210291930211.png
Normal file
BIN
docs/public/img/2022/10/29/202210291930211.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
Reference in New Issue
Block a user