docker启动时环境变量不生效(docker打包成镜像后环境变量失效)

前言

因项目需要多处部署,为了部署的方便,于是准备将项目环境打包成docker镜像以便于部署。mq、mysql这些在仓库中都有现成的镜像,虽然java和nginx的也都有,但是不知道当时是怎么想的,就不想搞太多镜像,也打算自己实践一下docker踩踩坑,就拉了个debian的环境自己配。

问题

按照网上的教程在容器中配置Java环境,这点没什么难的,学过Java的都能做到,我也确实成功了。然后在重启验证时发现环境变量失效了,然后在网上搜索时发现在/etc/profile中设置的环境变量每次进入时都需要source /etc/profile,这有些麻烦,然后找到了另外一种方式,可以把环境变量写入~/.bashrc中,每次打开新的shell时都会执行,听着就比较符合我们的要求了,然后重启以及重新进入shell都验证一下,发现Java环境都生效。
然后写个shell脚本,让容器在启动时运行我的各个服务,退出容器并打包成镜像。本以为大功告成了,谁知在测试镜像能否正常运行我的各个服务时报错了,又是Java环境问题。但是之前已经验证过环境没问题,进入容器查看Java环境发现一切正常,没有问题。于是退出容器重启,结果还是因为没有Java环境报错,这就很奇怪了,有点像量子力学了,观察就有,不观察就没有。
既然是shell脚本运行的时候没有Java环境,那我们可以在脚本中配置Java环境就能解决这个问题,确实也有不少执行脚本都这么做,但是我还是想知道环境变量为什么失效。

解决思路

首先怀疑的肯定是加载顺序,自己写的脚本执行得比~/.bashrc快。那么在init.sh中写入以下内容。
在这里插入图片描述
在~/.bashrc中写入以下内容
在这里插入图片描述
然后把容器提交成镜像后启动镜像docker run -itd config_init_test:2.0 /init.sh
在Docker Desktop中发现压根就没执行~/.bashrc中的内容
在这里插入图片描述
顺着~/.bashrc中的命令没有执行这个线索去查,仔细阅读之后才意识到我在上面加粗的那句“每次打开新的shell时都会执行,那不打开shell就不会执行,而绝大多数运行镜像的场景都是后台运行,不会打开shell,环境变量的设置理所当然的失效。

解决方案

1、在shell脚本设置环境变量
2、在Dockerfile中使用ENV命令
一开始我是用的方案2,但是语法没写对导致我以为这种用法不行才换的写入~/.bashrc这个方案,然后就踩了这个坑。。。

总结

对Linux不熟悉,平时接触得也少,这算是Linux的基础知识吧,没事还是多学学基础知识,特别是想要用好docker的话Linux基础知识必不可少。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/450215.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣大厂热门面试算法题 15-17

15. 三数之和,16. 最接近的三数之和,17. 电话号码的字母组合,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.11 可通过leetcode所有测试用例。 目录 15. 三数之和 解题思路 完整代码 Java Python ​…

29.基于SSM实现的少儿编程网上报名系统(项目 + 论文PPT)

项目介绍 随着计算机的不断发展,已经融入到我们生活工作的每一个领域中,给我们的生活工作带来了很多的便利,因此,希望可以通过该系统的开发也能使少儿编程网上报名系统实现信息化管理,减轻人的负担,提高工作…

申请选择商家转账到零钱流程怎样的

商家转账到零钱是什么? 【商家转账到零钱】可以说是【企业付款到零钱】的升级版,商家转账到零钱可以为商户提供同时向多个用户微信零钱转账的能力,支持分销返佣、佣金报酬、企业报销、企业补贴、服务款项、采购货款等自动向用户转账的场景。…

伦敦金交易市场的参与者有哪些?

伦敦金交易市场,作为全球最大的黄金交易市场之一,吸引了众多的参与者。这些参与者来自不同的背景和角色,每个人都在这个市场中发挥着重要的作用。 首先,我们不得不提到的是市场的核心参与者——交易商。交易商是市场上最活跃的群体…

FTP,SFTP,FTPS,SSL,TSL简介,区别,联系,使用场景说明

文章目录 简介FTPFTPSSFTP加密场景选择FTPS还是SFTPFTP、SFTP、FTPS区别、联系和具体使用场景如何使用FTP、SFTP和FTPSSSLTLSSSL和TLS区别和联系,以及使用场景SSL和TLS技术上的区别一些问题隐式的TLS(FTPS/SSL)或者显式的TLS(FTPS…

【Python】新手入门学习:什么是python解释器,它的作用是什么?

【Python】新手入门学习:什么是python解释器,它的作用是什么? 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基…

STM32CubeMX学习笔记19——SD卡(SDIO接口)

1、简介 1.1 SD卡简介 很多单片机系统都需要大容量存储设备,以存储数据(常用的有U盘、FLASH芯片、SD卡等),比较而言SD卡是单片机大容量外部存储的首选,只需要少数几个IO口即可外扩一个容量从几十M到几十G的&#xff…

前端实现 查询包含分页 以及封装table表格 上手即用!

表格组件是 element plus 中的table 又经过了一层封装 封装的table代码在最底下 <div class"box2"><el-radio-group v-model"radio" style"margin-bottom: 16px"><el-radio-button label"1">类型1</el-radio…

vue3 uniapp 项目初始化集成配置【开箱即用】

https://gitee.com/charrie/vue3-uniapp-init 技术说明 采用vue3viteuniapp技术栈&#xff0c;setup语法糖编码方式引入unocss量子化样式引擎&#xff0c;动态css不用自己写样式&#xff0c;引用class即可&#xff0c;降低代码体积全局请求入口已封装&#xff0c;使用时自己封…

易基因: WGBS+ChIP-seq揭示食管癌的细胞类型和癌症特异性表观遗传调控|Genome Biol

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 食管癌是一种常见的恶性肿瘤&#xff0c;有两种亚型&#xff1a;鳞状细胞癌&#xff08;squamous cell carcinoma&#xff0c;ESCC&#xff09;和腺癌&#xff08;adenocarcinoma&#x…

【C++】string类(介绍、常用接口)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 string类的常用接口说明 string类对象的常见构造 ​编辑 string字符串的遍历&#xff08;迭代器&#xf…

力扣刷题Days12--104二叉树最大深度(js)

目录 1&#xff0c;题目 2&#xff0c;代码 2.1深度优先遍历--递归思想 2.2-0广度优先搜索--错误版 2.2广度优先搜索 3&#xff0c;学习与总结 3.1二叉树的复习 3.2array常用函数复习 1&#xff0c;题目 给定一个二叉树 root &#xff0c;返回其最大深度。二叉树的 最大…

解决Iterm2升级后遇到“Stashed changes“的问题

&#xff1c;&#xff1c;&#xff1c;&#xff1c;&#xff1c;&#xff1c;&#xff1c; Updated upstream ...... &#xff1e;&#xff1e;&#xff1e;&#xff1e;&#xff1e;&#xff1e;&#xff1e; Stashed changes冲突标记符的代码如题&#xff0c;最近有升级Item2…

鸿蒙原生应用元服务开发-WebGL网页图形库开发接口说明

一、场景介绍 WebGL主要帮助开发者在前端开发中完成图形图像的相关处理&#xff0c;比如绘制彩色图形等。目前该功能仅支持使用兼容JS的类Web开发范式开发。 二、接口说明 表1 WebGL主要接口列表 本文参考引用HarmonyOS官方开发文档&#xff0c;基于API9。

RStudio更换R语言版本

今天下载R语言用于读取.xlsx文件的readxl包时&#xff0c;RStudio提示该包是使用R-4.3.3版本构建&#xff0c;而我现在使用的是R-4.3.2版本&#xff0c;所以需要升级一下R语言版本&#xff0c;这里先下载最新版本的R语言&#xff0c; 下载地址&#xff1a;The Comprehensive R…

Early if-conversion - 优化阅读笔记

Early if-conversion 用于对于没有很多可预测指令的乱序CPU。目标是消除可能误预测的条件分支。 来自分支两侧的指令都会被推测性地执行&#xff0c;并使用 cmov 指令选择结果。 // SSAIfConv 类在确定可能的情况下&#xff0c;对SSA形式的机器码执行if-conversion。该类不包…

基于JAVA实现自由教学平台设计【附项目源码】分享

基于JAVA实现自由教学平台系统演示 视频&#xff1a;ssm自由教学平台演示录像-CSDN直播基于JAVA实现自由教学平台设计https://live.csdn.net/v/369811 项目源码地址&#xff1a;https://download.csdn.net/download/weixin_43894652/88842681 一、目标 构建一个基于JAVA的网…

第八十天 WAF攻防-漏洞利用HPP污染分块传输垃圾数据

第80天 WAF攻防-漏洞利用&HPP污染&分块传输&垃圾数据 参考点&#xff1a; #将MySQL注入函数分为几类 拆分字符串函数&#xff1a;mid、1eft、1pad等 编码函数&#xff1a;ord、hex、a3ci等 运算函数&#xff1a;*/&^&#xff01;1 ike rlike reg等 空格替换部…

Python-Pong-Game

我还加了音效&#xff0c;类似于小时候游戏机上的弹球游戏 import os import turtle import pygame#初始化pygame pygame.init()#加载声音文件 bounce_sound pygame.mixer.Sound("bounce.mp3")wn turtle.Screen() wn.title("Pong by ") wn.bgcolor(&qu…

【猫头虎科技解码】探秘Drools语法:规则引擎在实战中的应用️

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …