Dockerfile 构建的镜像通过 ssh 登录后,环境变量被重置

2021-05-24 17:20:14 +08:00
 css3

直接通过docker exec进去环境变量是正常的,python,pip啥的都有,但通过ssh登录后,啥都没有, 使用场景又是在ssh登录的前提下使用的

目前是手动 ssh 登录进去,命令行执行: export $(cat /proc/1/environ |tr '\0' '\n' | xargs)

有没有一劳永逸的方法,直接在Dockerfile中就搞定环境变量?或者是直接在docker-compose.yml中能处理这个吗

2155 次点击
所在节点    程序员
18 条回复
chenyi
2021-05-24 17:22:00 +08:00
dockerfile 的 ENV 命令可以搞定
chenyi
2021-05-24 17:23:18 +08:00
docker-compose 的 environment 也可以做到
css3
2021-05-24 17:24:02 +08:00
@chenyi 我尝试了,无效
ENV $(cat /proc/1/environ |tr '\0' '\n' | xargs)
chenyi
2021-05-24 17:25:10 +08:00
@css3 你 ssh 的用户是不是和 docker exec 的用户不是同一个
css3
2021-05-24 17:26:38 +08:00
@chenyi 了解了,那么请教下,Dockerfile 中的 ENV 和 docker-compose.yml 的 environment 如何使用 export $(cat /proc/1/environ |tr '\0' '\n' | xargs),直接写上去没有用,也没报错,好像没生效
Macolor21
2021-05-24 17:27:06 +08:00
不知道你说的是不是这个环境变量,只能 run 的时候指定-e 某个变量=xxx 或者-env-file=path-to-file 吧
compose 也有 Environment 标签
https://docs.docker.com/compose/environment-variables/
chenyi
2021-05-24 17:27:40 +08:00
@css3 用 RUN 命令执行?
css3
2021-05-24 17:29:56 +08:00
@chenyi 一样的无效
css3
2021-05-24 17:30:45 +08:00
@Macolor21 就指定一句 export,还要搞个 env 文件吗
liuguang
2021-05-24 17:30:57 +08:00
MySQL 的,楼主应该知道怎么设置环境变量吧

```yaml
version: '3.1'

services:
db_server:
image: mysql:8.0
restart: always
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: "123456"
TZ: Asia/Shanghai
volumes:
- ./app/db_data:/var/lib/mysql:rw
```
css3
2021-05-24 17:34:55 +08:00
@liuguang 它不是个 key, value,我不知道 compose 里边怎么转化这个:export $(cat /proc/1/environ |tr '\0' '\n' | xargs)
CivAx
2021-05-24 17:38:44 +08:00
在 compose yaml 里加一条 command: bash -c "export xxx" 试下呢?
liuguang
2021-05-24 17:38:48 +08:00
https://docs.docker.com/compose/compose-file/compose-file-v3/#entrypoint

把 docker 的 entrypoint 换成一个脚本,用脚本先执行你的环境变量设置,再运行程序
kennylam777
2021-05-24 17:45:33 +08:00
問題不是在 docker, 而是 sshd 下的 shell 沒有引用 container 的 enviroment

上面一堆教 Dockerfile 等等的都被樓主帶錯了方向

用 Google 的話秒查到答案了吧
https://stackoverflow.com/questions/34630571/docker-env-variables-not-set-while-log-via-shell
Macolor21
2021-05-24 17:50:36 +08:00
@kennylam777

回看了一遍问题,刚想说自己忽略了(直接通过 docker exec 进去环境变量是正常的,python,pip 啥的都有,但通过 ssh 登录后,啥都没有, 使用场景又是在 ssh 登录的前提下使用的),既然你给出答案了,我也不赘述了
css3
2021-05-24 17:59:36 +08:00
@CivAx 不行,可以 build 但无法启动容器
css3
2021-05-24 18:00:17 +08:00
@kennylam777 多谢老铁,知道了根本原因,通过 statck 这个帖子解决了👍
julyclyde
2021-05-25 13:48:08 +08:00
首先你 ssh 进容器就已经很不对了……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/778905

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX