解决Docker环境变量的配置的通用方法

我们部署的很多服务都是以Docker容器的形式存在的。

在运行Docker容器前,除了设置网络、数据卷之外,还需要设置各种各样的环境变量。

有时候,由于容器版本的问题,一些文档没有及时更新,可能同时存在多个新旧版本的环境变量设置,让人感到迷惑。当然,这个时候,查看官方在DockerHub上编写的环境变量,通常来说是一个比较不错的解法。但有时候,官方文档上也没有涵盖我们所有想要设置的环境变量,这个时候,换一种更加高级、更加有效的方案------查看启动的启动脚本文件。

这里以ShardingSphere-Proxy容器为例,具体步骤如下:

官方镜像地址:apache/sharidngsphere-proxy:5.5.1

1.查看容器的Image Layers

登录DockerHup进入所使用镜像版本的详情页面,看容器的构建命令,**重点关注CMD和ENTRYPOINT。**在Sharding的镜像构建中,使用了ENTRYPOINT 命令启动了一个脚本,我们想要的查看的内容都在这一个脚本中。

2.寻找对应的启动脚本或文件

知道容器是通过什么启动起来之后,我们去寻找对应的二进制发布包。通常对应的文件会在官方教程中会给出现地址。注意,这里的二进制发布包不一定是源代码,要找同Docker对应的二进制发布包部署方式。

3.下载二进制发布包,查看、确定对应的环境变量

在我们下载的二进制发布包中,寻找对应的启动脚本,然后使用本地的IDE查看脚本中的内容。这里推荐一个方法:直接把脚本内容丢给AI,让AI总结脚本的大致功能。根据自己的需求看对应的代码,这是AI比较擅长的。比如:我需要控制ShardingSphere-Proxy运行时候占用的内存大小,也就是设置-xmx,防止在运行的过程中出现OOM。

寻找代码的位置,直接Ctrl+F

主要就是画框的这两处逻辑

在容器环境下,如果我们想要控制JVM的运行时占用的内存大小,就需要CGROUP_MEM_OPTS的值。

这里可能会有朋友感到疑问,IS_DOCKER的值不需要设置吗?

不需要设置,因为IS_DOCKER通常用来表示是否是docker环境,而改值已经在Dockerfile中设置了,具体下下方图片。

4.在脚本中echo并进行测试

确定环境变量之后,我们进行测试,看看是否向我们预期的一样。

  1. 我们需要在脚本对应的位置加上echo,输出对应的参数。
  2. 如果使用Windows的同学,需要shell脚本上传到Linux虚拟机中,Mac的朋友则不需要上传。
  3. 设置环境变量,格式export key=value,等号左右不要有空格
  4. 运行shell脚本。

5.投入正式的环境,查看是否同预期一致

有些容器的启动脚本,可能并没有我们想要观察的数据,这时候,我们可以将容器的启动脚本进行替换。替换方式有多种,这里推荐使用Dockerfile的方式进行替换。

我们编写新的Dockerfile文件,基础镜像直接选择我们所使用的测试镜像,然后向对应的启动脚本替换即可。具体路径在DockerHub的Image Layers进行查看。

执行docker build的时候,注意镜像构建的上下文。

对镜像构建上下文不太明白的同学可以看这篇博客,gitbook:Docker从入门到实践

复制代码
FROM apache/shardingsphere-proxy:5.5.1
COPY ./start.sh /opt/shardingsphere-proxy/bin/start.sh
RUN chmod +x /opt/shardingsphere-proxy/bin/

ok,环境变量的参数生效了。

在网上搜不到的答案,要学会换一换方法,仔细想一想文档编写的依据是什么?环境变量设置的依据是什么?从底层出发来解决问题。

相关推荐
java_logo1 分钟前
Docker 部署微服务项目保姆级教程
java·运维·docker·微服务·容器·eureka·架构
lecepin15 分钟前
AI Coding 资讯 2025-10-22
前端·javascript·后端
oak隔壁找我16 分钟前
Servlet 三大组件详解
java·后端
oak隔壁找我30 分钟前
SpringBoot 实现 JWT 认证完整方案
java·后端
王中阳Go39 分钟前
挑战一周用 AI 开发商业化项目!4 大痛点反思 + 新手专属提示词分享
后端·aigc·openai
oak隔壁找我1 小时前
RabbitMQ 实现延迟通知的完整方案
java·后端
ezl1fe1 小时前
第一篇:把任意 HTTP API 一键变成 Agent 工具
人工智能·后端·算法
小胖霞1 小时前
从零开始:在阿里云 Ubuntu 服务器部署 Node+Express 接口(基于公司 GitLab)
前端·后端
金銀銅鐵1 小时前
[Java] JDK 21 新变化之 Sequenced Collections
后端
阿里云云原生1 小时前
Higress v2.1.8:30 项引擎更新 + 4 项控制台更新
云原生