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中。

在这里插入图片描述

发布了281 篇原创文章 · 获赞 35 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/TQCAI666/article/details/103852299