1
dunhanson OP 可能有人说,不推荐容器中使用 SSH,但是现阶段水平有限,SSH 还有有必要的
|
2
gouchaoer2 2018-07-14 15:25:20 +08:00 via Android 1
安装 ssh server,因为默认镜像大都没有。。其实用 ssh 不如 docker exec 进去
|
3
dunhanson OP @gouchaoer2 我擦,点错了,点了个感谢。我安装了 ssh,现在想直接 ssh 进去,然后环境变量生效
|
4
402645707 2018-07-14 15:32:20 +08:00
|
6
402645707 2018-07-14 15:47:21 +08:00
@dunhanson 如果你没有引入自带 ssh 环境变量容器,你需要自己写个脚本读 docker 传的环境变量来改 /etc/ssh/sshd_config
|
7
cz5424 2018-07-14 15:49:19 +08:00 via Android
docker exec -it 容器名 bash
|
8
cz5424 2018-07-14 15:51:15 +08:00 via Android
不知道楼主设置环境变量的目的是什么,Dockfile 写 ENV 命令就可以设置容器的环境变量,不用 ssh 进去容器命令如上
|
9
cz5424 2018-07-14 15:51:44 +08:00 via Android
手误少打了 er
|
10
qsnow6 2018-07-14 15:54:02 +08:00
没理解,转发下端口不就能连了吗
|
12
dunhanson OP @cz5424 我相当于把容器当虚拟机来用了,用来部署测试项目,经常需要重启 tomcat。
现在时我每次时 ssh 到容器,上传修改的文件到容器, 然后切换标签进入宿主机,再 docker exec -it xxx bash 进入到容器,重启 tomcat 这样不会很麻烦? |
13
dunhanson OP @qsnow6 没说不能连,是连接了环境变量无效的问题,只有通过 docker exec -it xxx bash 进入,环境变量才正常
|
14
lrh3321 2018-07-14 16:45:41 +08:00
Dockerfile 里用 ENV 指令定义环境变量,docker run 的时候 -e 设置也不行吗?
|
15
jptx 2018-07-14 16:57:17 +08:00 1
可以修改容器里的~/.bashrc 文件,把你的那些 export 语句都加进去,我的一个容器和你是很相似的用途,就是当成虚拟机用来测试项目,我修改的就是这个文件,把什么 JAVA_HOME 什么的都在这里面写 export,还在里面写了一些 alias 用来方便跳转,方便重启服务
|
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 这样; |
17
ETiV 2018-07-14 18:07:40 +08:00 via iPhone
Lz 的 docker 可能用错了?
你 ssh 的环境变量,无法影响到 docker entrypoint 的环境变量…… 建议了解一下 docker-compose,很方便的 |
22
singer 2018-07-14 21:48:16 +08:00 via iPhone 1
楼主可能思维错了。
传东西,你可以把目录挂到宿主机,在宿主机里改,容器内就会更改 如果你要进入容器,远程服务器的话,你 ssh 进宿主机,然后 docker exec -it 容器名 bash(如果你的容器没有 bash,就用 sh) 查看容器名的方法是 docker ps,最后一个参数就是容器名 多个服务需要同时起,建议使用 docker-compose |
23
singer 2018-07-14 21:55:47 +08:00 via iPhone
上面我没回答到点子上,环境变量在你 dockerfile 阶段最好都定义好。
有些程序在构建镜像的时候,就会把环境变量放进去,所以后面改环境变量也没有任何作用 还有的是在容器启动得时候,加载环境变量的,这个时候,修改环境变量的。 还有一种情况就是,构建的时候,读取环境变量,写入到文件,写死。然后在 enterpoint 文件里写的脚本,在容器启动的时候,读取环境变量,然后再一次覆盖文件。这样,环境变量也会生效。 至于你的环境变量配置后,用不了,我想应该是这个变量在构建的时候,用到了,然后写入了文件。然后在容器启动得时候,没有重新读取覆盖的问题。 |
26
Reficul 2018-07-15 10:57:08 +08:00 via Android
容器即进程,重启 tomcat 和重启容器是一样的😬
|
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
|
28
NoBeeBee 2019-04-10 18:40:44 +08:00
在布置好 ssh 服务之前,需要启动容器之前,即 docker run 的时候把容器内部的 ssh 服务的 22 端口映射到寄主机上面你指定的端口,例如 2022,参数如下:
-p 2022:22 |