Docker 如何配置环境变量,使得 SSH 后可以使用? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
dunhanson
V2EX    程序员

Docker 如何配置环境变量,使得 SSH 后可以使用?

  •  
  •   dunhnson 2018-07-14 15:21:08 +08:00 8204 次点击
    这是一个创建于 2668 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题所述,百度 google 好久,都没有找到解决办法,网上说写入 /etc/profile,但是无效
    28 条回复    2019-04-10 18:40:44 +08:00
    dunhanson
        1
    dunhanson  
    OP
       2018-07-14 15:22:47 +08:00
    可能有人说,不推荐容器中使用 SSH,但是现阶段水平有限,SSH 还有有必要的
    gouchaoer2
        2
    gouchaoer2  
       2018-07-14 15:25:20 +08:00 via Android   1
    安装 ssh server,因为默认镜像大都没有。。其实用 ssh 不如 docker exec 进去
    dunhanson
        3
    dunhanson  
    OP
       2018-07-14 15:30:06 +08:00
    @gouchaoer2 我擦,点错了,点了个感谢。我安装了 ssh,现在想直接 ssh 进去,然后环境变量生效
    402645707
        4
    402645707  
       2018-07-14 15:32:20 +08:00
    第一步:安装 docker
    第二步:配置 docker 容器
    第三步:ssh 连上去
    https://blog.csdn.net/qq626387/article/details/50506636
    dunhanson
        5
    dunhanson  
    OP
       2018-07-14 15:38:37 +08:00
    @402645707 我现在可以 ssh,就是环境变量无效
    402645707
        6
    402645707  
       2018-07-14 15:47:21 +08:00
    @dunhanson 如果你没有引入自带 ssh 环境变量容器,你需要自己写个脚本读 docker 传的环境变量来改 /etc/ssh/sshd_config
    cz5424
        7
    cz5424  
       2018-07-14 15:49:19 +08:00 via Android
    docker exec -it 容器名 bash
    cz5424
        8
    cz5424  
       2018-07-14 15:51:15 +08:00 via Android
    不知道楼主设置环境变量的目的是什么,Dockfile 写 ENV 命令就可以设置容器的环境变量,不用 ssh 进去容器命令如上
    cz5424
        9
    cz5424  
       2018-07-14 15:51:44 +08:00 via Android
    手误少打了 er
    qsnow6
        10
    qsnow6  
       2018-07-14 15:54:02 +08:00
    没理解,转发下端口不就能连了吗
    dunhanson
        11
    dunhanson  
    OP
       2018-07-14 15:58:54 +08:00
    @402645707 看上去好麻烦的样子
    dunhanson
        12
    dunhanson  
    OP
       2018-07-14 16:02:21 +08:00
    @cz5424 我相当于把容器当虚拟机来用了,用来部署测试项目,经常需要重启 tomcat。
    现在时我每次时 ssh 到容器,上传修改的文件到容器,
    然后切换标签进入宿主机,再 docker exec -it xxx bash 进入到容器,重启 tomcat
    这样不会很麻烦?
    dunhanson
        13
    dunhanson  
    OP
       2018-07-14 16:03:34 +08:00
    @qsnow6 没说不能连,是连接了环境变量无效的问题,只有通过 docker exec -it xxx bash 进入,环境变量才正常
    lrh3321
        14
    lrh3321  
       2018-07-14 16:45:41 +08:00
    Dockerfile 里用 ENV 指令定义环境变量,docker run 的时候 -e 设置也不行吗?
    jptx
        15
    jptx  
       2018-07-14 16:57:17 +08:00   1
    可以修改容器里的~/.bashrc 文件,把你的那些 export 语句都加进去,我的一个容器和你是很相似的用途,就是当成虚拟机用来测试项目,我修改的就是这个文件,把什么 JAVA_HOME 什么的都在这里面写 export,还在里面写了一些 alias 用来方便跳转,方便重启服务
    XSG
        16
    XSG  
       2018-07-14 17:50:57 +08:00   1
    1、配置环境变量,可以 docker run -e TZ="Asia/Shanghai" 这样指定;也可以自己重新制作镜像,在 Dockerfile 中指定好环境变量
    2、传文件到容器里面,你的思路完全错了,用不着 ssh ;你可以在宿主机上用 -v 参数映射一个路径到容器,然后文件直接放到宿主机的这个路径就满足你的要求了
    3、然后是重启 tomcat,最简单的方法是 docker restart $container_name 这样;
    ETiV
        17
    ETiV  
       2018-07-14 18:07:40 +08:00 via iPhone
    Lz 的 docker 可能用错了?

    你 ssh 的环境变量,无法影响到 docker entrypoint 的环境变量……

    建议了解一下 docker-compose,很方便的
    dunhanson
        18
    dunhanson  
    OP
       2018-07-14 21:42:56 +08:00
    @lrh3321 尝试过了,不行
    dunhanson
        19
    dunhanson  
    OP
       2018-07-14 21:43:26 +08:00
    @jptx 好的,我回头试试 谢谢了
    dunhanson
        20
    dunhanson  
    OP
       2018-07-14 21:44:33 +08:00
    @XSG 对哟,好的 我试试
    dunhanson
        21
    dunhanson  
    OP
       2018-07-14 21:45:00 +08:00
    @ETiV 嗯 好的
    singer
        22
    singer  
       2018-07-14 21:48:16 +08:00 via iPhone   1
    楼主可能思维错了。
    传东西,你可以把目录挂到宿主机,在宿主机里改,容器内就会更改
    如果你要进入容器,远程服务器的话,你 ssh 进宿主机,然后 docker exec -it 容器名 bash(如果你的容器没有 bash,就用 sh)

    查看容器名的方法是 docker ps,最后一个参数就是容器名

    多个服务需要同时起,建议使用 docker-compose
    singer
        23
    singer  
       2018-07-14 21:55:47 +08:00 via iPhone
    上面我没回答到点子上,环境变量在你 dockerfile 阶段最好都定义好。
    有些程序在构建镜像的时候,就会把环境变量放进去,所以后面改环境变量也没有任何作用

    还有的是在容器启动得时候,加载环境变量的,这个时候,修改环境变量的。

    还有一种情况就是,构建的时候,读取环境变量,写入到文件,写死。然后在 enterpoint 文件里写的脚本,在容器启动的时候,读取环境变量,然后再一次覆盖文件。这样,环境变量也会生效。

    至于你的环境变量配置后,用不了,我想应该是这个变量在构建的时候,用到了,然后写入了文件。然后在容器启动得时候,没有重新读取覆盖的问题。
    dunhanson
        24
    dunhanson  
    OP
       2018-07-14 22:12:05 +08:00
    @jptx 按照你的方法试了下,确实可行
    dunhanson
        25
    dunhanson  
    OP
       2018-07-14 22:15:27 +08:00
    @singer 嗯 我试试
    Reficul
        26
    Reficul  
       2018-07-15 10:57:08 +08:00 via Android
    容器即进程,重启 tomcat 和重启容器是一样的
    xuexb
        27
    xuexb  
       2019-01-06 22:29:45 +08:00
    我也遇到这个问题了,场景是需要 SSH 登录到容器里去部署代码、启动服务,而我配置了个环境变量用来区分当前是哪个环境 ENV_LABEL,发现也没生效,然后使用了在 Dockerfile 入口文件里去向 ~/.bashrc 里写入 export 变量,如: https://github.com/xuexb/DevOps/blob/8f902cb8c4d6c682b2085a657965e625ef958091/jenkins-node/node/env.sh
    NoBeeBee
        28
    NoBeeBee  
       2019-04-10 18:40:44 +08:00
    在布置好 ssh 服务之前,需要动容器之前,即 docker run 的时候把容器内部的 ssh 服务的 22 端口映射到寄主机上面你指定的端口,例如 2022,参数如下:
    -p 2022:22
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2565 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 07:43 PVG 15:43 LAX 00:43 JFK 02:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86