我为需要ssh到localhost的应用程序构建Docker镜像(即ssh user @ localhost)
我正在使用Ubuntu桌面计算机,并使用基本的ubuntu:16.04容器启动。 以下是我的Dockerfile的内容:
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y \
openjdk-8-jdk \
ssh && \
groupadd -r custom_group && useradd -r -g custom_group -m user1
USER user1
RUN ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N "" && \
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
然后我使用以下命令构建此容器:
docker build -t test-container .
使用以下方式运行:
docker run -it test-container
容器打开时出现以下提示,并正确生成密钥以启用ssh到localhost:
user1@0531c0f71e0a:/$
user1@0531c0f71e0a:/$ cd ~/.ssh/
user1@0531c0f71e0a:~/.ssh$ ls
authorized_keys id_rsa id_rsa.pub
然后ssh进入localhost并接受错误:
user1@0531c0f71e0a:~$ ssh user1@localhost
ssh: connect to host localhost port 22: Cannot assign requested address
我是否有任何错误或需要配置的其他网络设置?我只想在运行容器中ssh到localhost。
答案 0 :(得分:10)
首先,您需要在映像构建脚本中安装ssh服务器:
RUN sudo apt-get install -y openssh-server
然后你需要启动ssh服务器:
RUN sudo /etc/init.d/ssh start
答案 1 :(得分:3)
正如OP评论中所述@ user2915097,这是由于容器中的ssh
实例尝试使用IPv6连接到主机。
使用-4
强制通过IPv4进行连接解决了这个问题。
$ docker run -it ubuntu ssh -4 user@hostname
答案 2 :(得分:0)
对于Docker Compose,我能够将以下内容添加到我的 .yml 文件中:
network_mode: "host"
我相信Docker中的等效项是:
--net=host