一、问题描述

最近使用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 的日志以获取更多的信息。