docker - 在 docker 构建时启用 ssh
问题描述
Docker 版本 17.11.0-ce,构建 1caf76c
我需要在 docker build 期间运行 Ansible 来构建和部署一些 java 项目,这样当我运行 docker image 时,我就完成了所有设置。但是,Ansible 需要 ssh 到 localhost。到目前为止,我无法使其工作。我尝试了不同的 docker 图像,现在我得到了 phusion ( https://github.com/phusion/baseimage-docker#login_ssh )。我有什么自动取款机:
FROM phusion/baseimage
# Use baseimage-docker's init system.
CMD ["/sbin/my_init"]
RUN rm -f /etc/service/sshd/down
# Regenerate SSH host keys. baseimage-docker does not contain any, so you
# have to do that yourself. You may also comment out this instruction; the
# init system will auto-generate one during boot.
RUN /etc/my_init.d/00_regen_ssh_host_keys.sh
RUN ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''
RUN cat ~/.ssh/id_rsa.pub | tee -a ~/.ssh/authorized_keys
RUN sed -i "s/#PermitRootLogin no/PermitRootLogin yes/" /etc/ssh/sshd_config && \
exec ssh-agent bash && \
ssh-add ~/.ssh/id_rsa
RUN /usr/sbin/sshd -d &
RUN ssh -tt root@127.0.0.1
CMD ["/bin/bash"]
但我仍然得到
Step 11/12 : RUN ssh -tt root@127.0.0.1
---> Running in cf83f9906e55
ssh: connect to host 127.0.0.1 port 22: Connection refused
The command '/bin/sh -c ssh -tt root@127.0.0.1' returned a non-zero code: 255
有什么建议可能是错的吗?甚至有可能实现这一目标吗?
解决方案
RUN /usr/sbin/sshd -d &
这将使用 shell 在后台运行一个进程。一旦启动进程的 shell 从运行后台命令返回,它就会退出而不再输入,并且用于该 RUN 命令的容器终止。从 RUN 中保存的唯一内容是对文件系统的更改。您不保存正在运行的进程、环境变量或 shell 状态。
这样的事情可能会起作用,但您可能还需要一个 sleep 命令来给 sshd 时间来完成启动。
RUN /usr/sbin/sshd -d & \
ssh -tt root@127.0.0.1
我个人会在构建过程中寻找另一种不使用 sshd 的方法。这感觉非常笨拙且容易出错。
推荐阅读
- javascript - How to get rid of everything inside <> brackets in Javascript?
- vuejs2 - 如何防止Vue输入设置值?
- sass - 如何将值添加到不带引号的参数
- css - 新的 chrome 标签设计(chrome 版本 69)的边框半径是多少?
- javascript - 为什么 Processing.js 给我一个关于我的代码中没有的函数的错误?
- node.js - 身份验证不适用于 Nodemailer
- php - 添加 prestashop 订单字段
- javascript - 反应意外的令牌,预期的“......”
- firebase - 由于 CORS 问题,firebase 托管阻止脚本
- java - 使用变量名调用字符串