docker中做到attach容器有ENV, ssh 容器也有ENV

build镜像的时候用ENV命令的确会添加环境变量。这样做的效果就是在docker run -it image_name或者docker attach container_name的时候,是可以查到ENV的。

但是某种情况下,使用ssh从其他地方访问容器时,会发现ENV消失了。这是因为每次ssh都会source .profile 从而导致在shell中的环境变量被覆盖调,或者说Docker的环境变量不是持久的。

有没有方式可以解决这个问题呢?答案是有的。

首先创建一个env.Dockerfile文件,这个文件用于存储共有的环境变量

ENV SCALA_HOME=/usr/share/scala
ENV HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
ENV SPARK_HOME=/usr/local/spark
ENV PATH=$PATH:/usr/local/spark/bin
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 
ENV HADOOP_HOME=/usr/local/hadoop 
ENV PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin 

然后创建脚本add_env.py

#!/usr/bin/env python
import sys
import os
from pathlib import Path

file=sys.argv[1]
print(f'file = {file}')
target_line='# auto add env'
txt=Path(file).read_text()
lines=txt.splitlines()
if target_line in lines:
    ix=lines.index(target_line)
    lines=lines[:ix+1]
env_lines=Path('env.Dockerfile').read_text().splitlines()
lines=lines+[target_line]+env_lines
Path(file).write_text('\n'.join(lines))

对于需要添加环境变量的Dockerfile,请确保有以下两行

ADD env.Dockerfile /tmp/env.Dockerfile
RUN sed -e "s/ENV/export/" /tmp/env.Dockerfile >> /root/.profile 

在终端执行./add_env.py Dockerfile, 就可以动态地将env.Dockerfile中的内容拼接到Dockerfile中。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值