我创建了一个包含mssql数据库的docker容器。在命令行ip a
上提供了容器的ip地址,但是尝试将其放入ssh username@docker_ip_address
会产生ssh: connect to host ip_address port 22: Connection refused
。所以我想知道我是否甚至可以将ssh放入容器中,这样我就不必总是使用docker工具docker exec ....
,如果可以的话,我该怎么做?
答案 0 :(得分:1)
要将ssh放进容器中,您应该完整填写以下内容
docker ps
命令应显示映射的端口22 希望以上信息可以帮助您了解情况...
答案 1 :(得分:0)
基本上,将您的Dockerfile更改为以下内容-将安装openssh-server,更改禁止的默认配置并启动服务:
# FROM a-image-with-mssql
RUN echo "root:toor" | chpasswd
RUN apt-get update
RUN apt-get install -y openssh-server
COPY entrypoint.sh .
RUN cd /;wget https://gist.githubusercontent.com/spekulant/e04521d6c6e1ccffbd3455c673518c5b/raw/1e4f6f2cb32caf3a4a9f73b02efdcbd5dde4ba7a/sshd_config
RUN rm /etc/ssh/sshd_config; cp sshd_config /etc/ssh/
ENTRYPOINT ["./entrypoint.sh"]
# further commands
现在,您已经拥有一个带有ssh服务器的映像,您要做的就是启动服务,您无法执行RUN service ssh start
,因为它不起作用-docker的详细信息,请参考文档。您必须使用如下所示的Entrypoint:
#!/bin/bash
set -e
sh -c 'service ssh start'
exec "$@"
将其放在entrypoint.sh
旁边的文件Dockerfile
中-记住chmod 755 entrypoint.sh
。这里要提到的一件事,您仍然无法通过SSH进入容器-默认的SSH服务器配置不允许使用密码登录到根帐户。因此,您可以自己更改配置并将其提供给映像,也可以信任我并使用我创建的文件-使用Dockerfile中的链接对其进行检查-那里没有恶意,只有从prohibit-password
到{{ 1}}。
对我们来说幸运的是-MSSQL官方映像从Ubuntu开始,因此上面的所有命令都完全适合环境。
修改
请务必询问是否不清楚或我跳得太快。
答案 2 :(得分:0)
如果您的容器包含数据库服务器,则正常的交互方式将是通过与其连接的SQL客户端进行; Google建议使用SQL Server Management Studio,并建议使用流行语言的连接器库。我不清楚给定容器中的外壳会如何处理,我在这里的主要建议是将重点放在以正常方式使用服务器上。
Docker容器通常运行一个单个进程,这通常是主服务器进程。在这种情况下,该容器仅运行 SQL Server。正如这里的其他答案所建议的那样,您需要大量重新整理容器才能运行ssh守护程序,这时您需要担心一堆其他问题,例如ssh主机密钥以及用户帐户和密码。典型的Docker映像根本不会考虑。
还请注意,Docker内部IP地址(您从ip addr
获得的信息; docker inspect
可能告诉您的信息)实际上是没有用的。总是有更好的方法来访问容器(使用容器间DNS在容器之间进行通信;使用主机的IP地址或DNS名称来访问来自同一主机或其他主机的已发布端口)。