请教大家一个 docker ssh 的问题

2023-03-08 10:22:00 +08:00
 awanganddong

现在用 docker 部署 Jenkins

需要容器内 jenkins 与其他内网服务器通信。但是现在和宿主机不共用 ssh 。

这中间的连通想问下大家该怎么解决。

1948 次点击
所在节点    程序员
22 条回复
dode
2023-03-08 10:24:51 +08:00
插两个网线可以吗
leimao
2023-03-08 10:31:24 +08:00
无脑一点的是 --network host ,不晓得有没有用
hhjswf
2023-03-08 10:32:32 +08:00
@leimao 不行吧,创建一个网络前提是本来就互通的
leimao
2023-03-08 10:32:55 +08:00
> 但是现在和宿主机不共用 ssh 。
你意思说别的机器也要 SSH 到 Docker container 里面吗?
hhjswf
2023-03-08 10:32:58 +08:00
Jenkins 为啥不部署到内网
SKYNE
2023-03-08 10:35:05 +08:00
OP 指的是 ssh 免密登录其他内网的主机吧
leimao
2023-03-08 10:36:17 +08:00
虽然我不是这方面专家,但是我感觉可以在 host 上专用一个 port map 给 Docker container ,然后这个 port 就用来和其他的 node 通信。
leimao
2023-03-08 10:37:33 +08:00
很多年前,我就是 SSH 到一个部署在 Docker 里的 TensorBoard 看模型训练的:
https://leimao.github.io/blog/TensorBoard-On-Docker/
leimao
2023-03-08 10:38:44 +08:00
虽然有几年没做这个了,生疏了,但感觉你做的 Jenkins 这些东西可以用一样的原理解决问题。
awanganddong
2023-03-08 10:40:46 +08:00
@SKYNE 对的,就是我现在需要从宿主机发代码到其他内网服务器。但是没法配免密登陆。

@leimao 可以了。
kd9yYw2RyhQwAwzn
2023-03-08 10:52:58 +08:00
把私钥做个挂载进容器内呢
cxtrinityy
2023-03-08 11:01:04 +08:00
通过宿主机 ssh tunnel 中转 ssh -L/-R 看看
awanganddong
2023-03-08 11:03:14 +08:00
@kd9yYw2RyhQwAwzn 我试下这个
@leimao @cxtrinityy 这种感觉做映射比较复杂,因为我需要借助 jenkis 插件。

实在不行我就直接编译安装了。
julyclyde
2023-03-08 12:33:46 +08:00
这就是典型的
因为用 docker 而带来的额外问题

不用 docker 的话就没这破事了
DigitalG
2023-03-08 13:54:25 +08:00
可以在镜像内固定挂载 SSH_AUTH_SOCK 文件和环境变量?
awanganddong
2023-03-08 15:19:26 +08:00
version: '3.1'
services:
jenkins:
image: jenkinsci/blueocean
user: root
privileged: true
container_name: jenkins
volumes:
- /usr/local/src/jenkins/jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /home/ubuntu/.ssh:/root/.ssh/ #/var/jenkins_home/.ssh/
ports:
- 8080:8080
- 50000:50000
restart: always

这是我的 docker-compose

在容器内通过 ssh 可以访问远端服务器

但是通过 ssh Publish Over SSH 就一直失败。

报错内容添加 key 失败,该密钥格式我还没试。

现在先编译安装一个看看问题是什么
1point
2023-03-08 15:23:15 +08:00
ssh -i $pem -p 22 -o StrictHostKeyChecking=no
把 pem 复制进去就可以了。我们 jenkins 也是跑在 docker 上的
awanganddong
2023-03-08 22:51:47 +08:00
我理解错了,
jenkins 容器是可以直接和远程服务器进行通信的。


1.在 Configure System 设置的主目录下直接生成公私钥:
ssh-keygen -m PEM -t rsa -b 4096

2.然后把私钥地址添加到 Publish over SSH 的 Path to key:
/var/jenkins_home/.ssh/id_rsa

3.SSH Servers 添加 远程地址

4.把生成的公钥添加到远程服务器的 authorized_keys 中。


谢谢大家了
awanganddong
2023-03-08 22:52:23 +08:00
docker-compose 这样配置就可以

version: '3.1'
services:
jenkins:
image: jenkinsci/blueocean
container_name: jenkins
privileged: true
user: root
volumes:
- /data/jenkins/:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 8080:8080
- 50000:50000
restart: always
awanganddong
2023-03-13 10:51:45 +08:00
再次更新,
jenkins 不建议用 root 权限去启动,存在的问题就是 root 的.ssh 与 jenkins .ssh 不在同一个目录下,

而容器启动后是以 jenkins 用户来操作的。
所以存在以上的问题。

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

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

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

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

© 2021 V2EX