【已解决】如何让容器内的应用程序使用代理?
首先,按照这种配置方法,即通过在 /etc/systemd/system/docker.service.d/http-proxy.conf 中设置代理,它只会影响 Docker 守护进程本身,并不会自动影响 Docker 容器内部的软件或容器中的网络行为。 这意味着:
- Docker 守护进程会通过代理访问外部资源(如拉取镜像、访问外部 API 等)。
- 但容器内部的网络流量(例如,容器内运行的应用程序)并不会自动使用主机上的 HTTP 代理。
为什么容器内部不会自动使用代理?
- Docker 容器内的环境变量与宿主机(主机)的环境变量是隔离的。
- 即使 Docker 守护进程(Docker daemon)配置了 HTTP 代理,容器内的应用程序或服务仍然不会知道这些代理设置,除非显式地为容器指定代理。
如何让容器内的应用程序使用代理?
如果你在容器中修改了 ~/.bash_profile 来配置代理,重启容器后代理配置不会自动生效,因为 ~/.bash_profile 仅在登录时加载,并且会话结束后失效。
为什么代理配置不会自动生效?
- 容器重启后:
~/.bash_profile只会在交互式登录 shell 启动时被加载(即通过docker exec进入容器时)。但是,容器重启时,环境变量设置并不会自动保存到新的会话中。 - 容器不是持久化的:容器重启后,它会恢复到原始的镜像状态,并不会自动保留容器内部的文件更改。
解决方案
方法 1:使用 Dockerfile 设置代理 为了确保代理配置在容器重启时仍然生效,你可以将代理配置写入 Dockerfile 中,这样每次容器启动时都会自动应用这些环境变量。
- 修改 Dockerfile: 在 Dockerfile 中,使用
ENV指令设置代理:
ENV http_proxy=http://<公网IP>:20172 #差点写成127.0.0.1好险ENV https_proxy=http://<公网IP>:20172 #自行修改IP:端口ENV no_proxy=localhost,127.0.0.1
- 重新构建镜像:
docker build -t <new_image_name> . - 重新启动容器: 使用新的镜像启动容器:
docker run -d --name <container_name> <new_image_name>
这样,无论容器是否重启,代理配置都会自动生效。
方法 2:修改 /etc/profile 或 /etc/environment(全局配置)
/etc/profile 或 /etc/environment(全局配置)如果你不想通过 Dockerfile 重建镜像,也可以修改容器内的全局配置文件,例如 /etc/profile 或 /etc/environment。
- 进入容器并编辑
/etc/profile:
docker exec -it <container_name> /bin/bash vi /etc/profile
- 添加代理配置: 在文件末尾添加:
export http_proxy=http://<公网IP>:<端口> export https_proxy=http://<公网IP>:<端口> export no_proxy=localhost,127.0.0.1
- 保存并生效: 保存后,运行以下命令使配置立即生效:
source /etc/profile - 重启容器: 容器重启后,这些配置会生效,因为它们是全局环境变量。
方法 3:在 docker run 时指定代理环境变量
你也可以通过 docker run 命令在启动容器时直接指定环境变量:
docker run -d \-e http_proxy=http://<公网IP>:20172 \-e https_proxy=http://<公网IP>:20172 \-e no_proxy=localhost,127.0.0.1 \--name <container_name> \<image_name>
这种方法适用于容器每次启动时都需要使用代理。
总结
~/.bash_profile配置:重启容器后不会自动生效。- 通过修改容器内的
/etc/profile或/etc/environment来使所有用户和会话都能自动生效?痴心妄想!本人实测。 - 不过你可以尝试创建自定义的启动脚本,并在其中包含你需要执行的环境设置或其他初始化操作。然后,将这个脚本作为容器的启动命令或通过CMD/ENTRYPOINT指令来执行。
- 推荐方法:
-
- 通过修改 Dockerfile 中的
ENV指令来持久化代理设置。
- 通过修改 Dockerfile 中的
-
- 在
docker run时指定代理环境变量
- 在
-
- 容器内软件设置界面可能支持配置代理参数
通过这些方法,代理配置可以在容器重启后依然生效。
补充提醒:
如果你使用了内网IP,“是在拖裤子放屁~~”
- 除非你设置容器网络模式 :
如果 Docker 容器使用的是 host 网络模式(通过 --network=host 启动),代理环境变量直接影响主机的网络请求,而不是容器内部。只有这种情况,容器内部与主机的127.0.0.1 是相通的,端口都不需要映射。本人亲测。
docker run -d \--restart=always \--privileged \ #←←这个参数是绿通?VIP?--network=host \ #这里~在这里--name xxxx\-e XXXX_ADDRESS=0.0.0.0:2026新年快乐 \-v /lib/modules:/lib/modules:ro \-v /etc/resolv.conf:/etc/resolv.conf \-v /etc/xxxx:/etc/xxxx \mzzxxx/xxxx
- 代理设置为内网IP有没有网络?,进入容器内部测试:
$ docker exec -it bxxx /bin/sh
$ cat /etc/os-release #查询系统OS
$ apk add curl #基于Alpine镜像的安装curl
$ curl -I https://www.baidu.com #访问百度
HTTP/1.1 200 Connection established #表示有网络连接成功
相关文章:
【已解决】如何让容器内的应用程序使用代理?
首先,按照这种配置方法,即通过在 /etc/systemd/system/docker.service.d/http-proxy.conf 中设置代理,它只会影响 Docker 守护进程本身,并不会自动影响 Docker 容器内部的软件或容器中的网络行为。 这意味着: Docker …...
DC/AC并网逆变器模型与仿真MATLAB
DC/AC并网逆变器是一种将直流电(DC)转化为交流电(AC),并将其与电网并联的设备。它的核心功能是实现直流电源(如光伏电池板或储能电池)与电网的有效连接,同时保证输出电能质量满足电网…...
P10424 [蓝桥杯 2024 省 B] 好数
题目描述 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位……)上的数字是奇数,偶数位(十位、千位、十万位……)上的数字是偶数,我们就称之为“好数”。 给定一个正整数 N…...
【Word_笔记】Word的修订模式内容改为颜色标记
需求如下:请把修改后的部分直接在原文标出来,不要采用修订模式 步骤1:打开需要转换的word后,同时按住alt和F11 进入(Microsoft Visual Basic for Appliations) 步骤2:插入 ---- 模块 步骤3:输入以下代码,点击运行 Sub HighlightInsertedText() Dim r As Revision…...
oracle位运算、左移右移、标签算法等
文章目录 位运算基础与或非同或同或应用场景 异或异或应用场景 什么是真值表 oracle基础函数创建bitor(按位或)函数bitnot(按位非)函数bitxor(按位异或)函数左移函数BITSHIFT()函数(实测不可用,废弃掉该方案)右移函数(略,有此场景吗?) 实际应用资质字典…...
spring boot学习第二十三篇:Spring Boot集成RocketMQ
前置条件先安装好RocketMQ 希望在Window10安装rocketMQ并简单使用,可以参考如下文章: Window10安装rocketMQ并简单使用-CSDN博客 1、pom.xml文件里面加上依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId&…...
去掉el-table中自带的边框线
1.问题:el-table中自带的边框线 2.解决后的效果: 3.分析:明明在el-table中没有添加border,但是会出现边框线. 可能的原因: 由 Element UI 的默认样式或者表格的某些内置样式引起的。比如,<el-table> 会通过 border-collapse 或 border-spacing 等属性影响边框的显示。 4…...
C语言gdb调试
目录 1.gdb介绍 2.设置断点 2.1.测试代码 2.2.设置函数断点 2.3.设置文件行号断点 2.4.设置条件断点 2.5.多线程调试 3.删除断点 3.1.删除指定断点 3.2.删除全部断点 4.查看变量信息 4.1.p命令 4.2.display命令 4.3.watch命令 5.coredump日志 6.总结 1.gdb介绍…...
Spring项目创建流程及配置文件bean标签参数简介
Spring文档根目录——里面可以找到所有版本 1. 项目搭建流程 1. pom.xml中引入依赖Spring-webMVC <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artif…...
reactor中的并发
1. reactor中的并发有两种方式 1.1 flatmap,底层是多线程并发处理。在reactor的演讲中,flatmap对于io类型的并发效果较好. flamap有两个参数: int concurrency, int prefetch。分别代表并发的线程数和缓存大小 注意凡是参数中有prefetch的,都…...
太速科技-418-基于AD9361 +ZYNQ7020 的软件无线电 SDR 套件
基于AD9361 ZYNQ7020 的软件无线电 SDR 套件 一、板卡信息 ● ZYNQ芯片采用XC7Z020,逻辑容量更大,支持更大的逻辑设计; ● 内存采用两片512M DDR3,共1GByte,更大容量。 ● 支持千兆网口,支持ZEDFMCO…...
监控易:一体化智能运维的扩展性优势深度解析
在现代企业数字化转型过程中,IT运维的需求日益多样化。企业不仅需要高效监控庞大的IT资源,还需应对多业务系统的集成需求,同时确保监控系统具备足够的灵活性以满足个性化的场景应用。 监控易凭借“一体化智能运维”的理念和技术,展…...
朴素贝叶斯算法:从生活到数学的完整解析
朴素贝叶斯算法:从生活到数学的完整解析 1. 引言:生活中的贝叶斯思维 想象你是一位医生,看到一位病人: 发烧(体温39度)咳嗽喉咙痛你会如何判断他是得了感冒还是新冠?这就是一个典型的贝叶斯思维过程。 2. 从直觉到数学 2.1 直觉思维 我们的思维过程是: 知道新冠和…...
Echarts的认识和基本用法
Echarts介绍和使用 Echarts介绍 官网地址:Apache ECharts Echarts是一个基于JavaScript的开源可视化图表库,由百度前端开发团队研发和维护。它提供了丰富的图表类型、数据统计分析、动态数据更新、多维数据展示等功能,可以帮助开发人员在 W…...
Linux文件系统的安全保障---Overlayroot!
overlayroot 是一种使用 OverlayFS 实现的功能,可将根文件系统挂载为只读,并通过一个临时的写层实现对文件系统的修改。这种方法非常适合嵌入式设备或需要保持系统文件完整性和安全性的场景。下文以 RK3568 平台为例,介绍制作 overlayroot 的…...
【Linux 之一 】Linux常用命令汇总
Linux常用命令 ./catcd 命令chmodclearcphistoryhtoplnmkdirmvpwdrmtailunamewcwhoami 我从2021年4月份开始才开始真正意义上接触Linux,最初学习时是一脸蒙圈,啥也不会,啥也不懂,做了很多乱七八糟,没有条理的笔记。不知…...
【线性代数】通俗理解特征向量与特征值
这一块在线性代数中属于重点且较难理解的内容,下面仅个人学习过程中的体会,错误之处欢迎指出,有更简洁易懂的理解方式也欢迎留言学习。 文章目录 概念计算几何直观理解意义 概念 矩阵本身就是一个线性变换,对一个空间中的向量应用…...
Unity 热更新基础知识
文章目录 1.一些名词2.三种编译方式3.Unity 两种脚本后端3.1 Mono3.2 IL2CPP3.3 对比 1.一些名词 IL(Intermediate Language):中间语言(类似于汇编代码)CIL(Common Intermediate Language)&…...
安全基础-互联网技术基础
互联网技术基础 概述:计算机网络、网络协议、HTTP协议、前端与后端技术、Web服务器、数据库以及浏览器等 目录 互联网技术基础前言一、计算机网络定义二、网络协议和协议分层1.OSI七层模型2.TCP/IP四层模型 三、HTTP协议1、HTTP协议的特点2、HTTP请求3、HTTP响应4、…...
深度学习从入门到实战——卷积神经网络原理解析及其应用
卷积神经网络CNN 卷积神经网络前言卷积神经网络卷积的填充方式卷积原理展示卷积计算量公式卷积核输出的大小计算感受野池化自适应均值化空洞卷积经典卷积神经网络参考 卷积神经网络 前言 为什么要使用卷积神经网络呢? 首先传统的MLP的有什么问题呢? - …...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
