通过SSH连接到docker sqlserver

时间:2018-07-06 08:42:49

标签: sql-server docker ssh

我创建了一个包含mssql数据库的docker容器。在命令行ip a上提供了容器的ip地址,但是尝试将其放入ssh username@docker_ip_address会产生ssh: connect to host ip_address port 22: Connection refused。所以我想知道我是否甚至可以将ssh放入容器中,这样我就不必总是使用docker工具docker exec ....,如果可以的话,我该怎么做?

3 个答案:

答案 0 :(得分:1)

要将ssh放进容器中,您应该完整填写以下内容

  • 应在容器内安装SSH服务器(Openssh),并且ssh服务应正在运行
  • 端口22应该从容器中发布(运行容器时)。更多信息,请点击此处> Publish ports on Docker
  • 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名称来访问来自同一主机或其他主机的已发布端口)。