我是docker的新手,并且一直在使用hub.docker.com
我想将ssh服务添加到容器中。我可以apt-get install
包裹(apt-get update
之后),但我不知道如何启动它。
通常(不在此容器中),我们可以通过service ssh start
的常规命令启动服务。但我不知道如何在容器中执行此操作而不会干扰ENTRYPOINT
和CMD
机制。
dockerfile附带docker-entrypoint.sh
(请参阅源代码here),我非常期望有CMD
行
CMD ["mysqld"]
我已经阅读了一些相关的SO文章,例如:
但由于docker文件中ENTRYPOINT
和CMD
的相互作用,它们不能直接应用于此处。
答案 0 :(得分:1)
您想要做的不是最佳做法,您应该做的是使用用户定义的泊坞网络(Here is the documentation)。
在您的情况下,您将例如:
<强> 1。创建网络
docker network create --driver bridge database_network
<强> 2。启动mariadb容器
docker run --network=database_network -itd --name=mariadb mariadb
第3。启动ssh容器
这里我们使用krlmlr/debian-ssh作为示例,随意使用任何其他图像
docker run --network=database_network -itd --name=ssh -p 22:22 -e SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" krlmlr/debian-ssh:wheezy
然后当您通过端口22 连接时,您可以使用 mariadb 作为主机名连接到数据库,所以不要让我们说 localhost: 3306 您将在ssh隧道中使用 mariadb:3306 。
如果您的服务器可以处理那么多容器的负载,这甚至允许您在不同的端口上设置具有不同ssh密钥的多个容器。
回答以下问题之间更有效的问题:A)运行一个同时包含mysqld和sshd的容器;和B)为mysqld运行两个容器,为sshd运行一个
资源使用的差异将是最小的,因为在官方mariadb映像中运行ssh将需要使用supervisor或s6,这将比单独运行两个容器多一个进程。这意味着根据ssh图像的大小,内存使用量也可能相同。就CPU使用率而言,我认为案例将是相同的,并且可能实际上有利于方案B.