一、问题描述
最近使用docker时,在docker中安装了Oracle Client,在root用户下将ORACLE_HOME等环境变量配置到了/etc/profile中,当时通过source /etc/profile命令使该文件生效,echo $ORCLE_HOME时也没有问题,但是重启容器以后就又不生效了。最近找到了解决方法,就是在/root/.bashrc文件中添加一句source /etc/profile(或者将环境变量的配置放到该文件中),就可以了。一直不明白原理,查阅了一下,稍微明白了,在这里总结下。
二、Linux下各种profile文件和bashrc文件的总结
1./etc/profile
用来设置系统环境参数,比如$PATH. 这里面的环境变量是对系统内所有用户生效的。
2./etc/bashrc
这个文件设置系统bash shell相关的东西,对系统内所有用户生效。只要用户运行bash命令,那么这里面的东西就在起作用。
3.~/.bash_profile
用来设置一些环境变量,功能和/etc/profile 类似,但是这个是针对用户来设定的,也就是说,你在/home/user1/.bash_profile 中设定了环境变量,那么这个环境变量只针对 user1 这个用户生效.
4.~/.bashrc
作用类似于/etc/bashrc, 只是针对用户自己而言,不对其他用户生效。
另外/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是”父子”关系。
~/.bash_profile 是交互式、login 方式进入 bash 运行的,意思是只有用户登录时才会生效。
~/.bashrc 是交互式 non-login 方式进入 bash 运行的,用户不一定登录,只要以该用户身份运行命令行就会读取该文件。
按照上面的观点,启动docker时后应该是非交互方式进入bash,因此就不会读取profile文件,要从~/.bashrc文件下才能加载。
三、关于这个问题的其他解决方法
正对docker的环境变量问题还可以通过,docker run 的-e参数,还有在dockerfile中这设置环境变量来解决
Linux下profile和bashrc区别/CSDN/来自外星的一只猿
使用docker exec进入容器,无法读取环境变量问题
一、问题描述最近使用docker时,在docker中安装了Oracle Client,在root用户下将ORACLE_HOME等环境变量配置到了/etc/profile中,当时通过source /etc/profile命令使该文件生效,echo $ORCLE_HOME时也没有问题,但是重启容器以后就又不生效了。最近找到了解决方法,就是在/root/.bashrc文件中添加一句source /e...
Linux下
环境
变量
概述:
/etc/
profile
: 此
文件
为系统的每个用户
设置
环境
信息,当用户第一次登录时,该
文件
被执行,并从/etc/
profile
.d目录的配置
文件
中
搜集shell的
设置
.
/etc/
bashrc
: 为每一个运行bash shell的用户执行此
文件
.当bash shell被打开时,该
文件
被读取.
//用户级别的
环境
变量
,用户可以覆盖全局
变量
~/.bash_
profile
: 每个用户都可使用该
文件
输入专用于自己使用的shell信息,当用户登录时,该
文件
仅仅执行一次!默认情况下,他
在
docker
容器
中
的/etc/
profile
配置了
环境
变量
,容器未重新启动是可以正常使用的,但是一旦重启就失效了,解决办法是在/root/.
bashrc
文件
最下面添加如下指令:
source /etc/
profile
保存
文件
,然后执行:
source /root/.
bashrc
这样再重启
docker
容器
环境
变量
就不会丢失了。
也可以直接在/root/.
bashrc
配置
文件
中
配置
环境
变量
。...
Docker
容器
中
解决重启配置不生效(source /etc/
profile
)
问题描述:
docker
在使用过程
中
,有时候自定义容器实例
中
的某些配置
文件
,例如:/etc/
profile
,但是修改后,每一次启动都需要手动 source 一遍令它重新生效,这很繁琐。
解决方法:在容器实例
中
~/.
bashrc
配置
文件
末尾添加 source /etc/
profile
,保存退出即可。这样就能够实现重启后...
image: webapp:${TAG}
更多信息请参考 Compose
文件
手册
中
的 Variable substitution 章节。
2.
设置
容器
中
的
环境
变量
可以通过 environment 关键字
设置
服务容器
中
的
环境
变量
,就跟使用
docker
run -e VARIABLE=VALUE … 一样:
environment:
- DEBUG=1
默认情况下,/etc/default/
docker
配置了不会生效的,我们需要手动添加到
docker
的
环境
设定
中
,需要配置的
文件
是/usr/lib/systemd/system/
docker
.service,需要添加EnvironmentFile=-/etc/default/
docker
,让后在ExecStart这个配置
中
,添加引用的参数$
DOCKER
_OPTS。置网桥的时候,我们在/etc/default/
docker
里添加了
DOCKER
_OPTS参数,但是
DOCKER
_OPTS参数不生效问题,网上给的教程太坑了,可能是因为他们是老版本的
Docker
问题和
环境
不一样的问题,修改了,根本不生效,
docker
在使用过程
中
,有时候自定义容器实例
中
的某些配置
文件
,例如:/etc/
profile
的java
环境
,在每一次退出重新进入容器后,配置失效,都需要手动 source 一遍令它重新生效。
配置描述:
问题重现:
解决办法:
在容器实例
中
/root/.
bashrc
配置
文件
末尾添加 source /etc/
profile
,保存退出即可
验证测试:
完美解决!
文章目录基本结构指令FROMMAINTAINERRUNADDCOPYCMDENTRYPOINTENVEXPOSEWORKDIRUSERARGVOLUMEONBUILDHEALTHCHECK创建镜像案例:构建apache镜像
Docker
file 是一个用来构建镜像的文本
文件
,文本内容包含了一条条构建镜像所需的指令和说明。
Docker
通过读取
Docker
file
中
的指令自动生成镜像。并且支持以 # 开头的注释行。
Docker
分为四部分:
基础镜像信息
维护者信息
镜像操作指令
容器启动时默
如果在
Docker
的 /etc/
docker
/daemon.json
文件
中
配置 hosts 后无法启动
Docker
,可能是由于配置
文件
格式有误导致的。你可以按照以下步骤解决这个问题:
1. 检查配置
文件
格式
首先,你需要检查一下 /etc/
docker
/daemon.json
文件
的格式是否正确。配置
文件
应该是一个 JSON 格式的
文件
,其
中
包含
Docker
daemon 的配置选项。确保
文件
中
的格式正确,没有语法错误。
例如,下面是一个正确的配置
文件
示例,其
中
配置了 hosts:
"hosts": ["unix:///var/run/
docker
.sock", "tcp://0.0.0.0:2375"],
"dns": ["8.8.8.8", "8.8.4.4"],
"dns-search": ["example.com"]
2. 重新启动
Docker
服务
如果 /etc/
docker
/daemon.json
文件
的格式正确,可以尝试重新启动
Docker
服务:
sudo systemctl restart
docker
这将会重新启动
Docker
服务,使配置生效。
3. 检查
Docker
日志
如果
Docker
服务仍然无法启动,你可以查看
Docker
的日志,以获取更多的信息:
sudo journalctl -u
docker
在日志
中
查找与 hosts 相关的错误信息,例如 DNS 解析错误等。根据错误信息,尝试修复配置
中
的问题,并重新启动
Docker
服务。
总之,如果在 /etc/
docker
/daemon.json
文件
中
配置 hosts 后无法启动
Docker
,你应该首先检查配置
文件
的格式是否正确,然后尝试重新启动
Docker
服务,并检查
Docker
的日志以获取更多的信息。