我已经使用高山映像创建了两个名为服务器和客户端的docker容器,并且我正在运行这两个容器。 然后我在两个容器中都安装了“ apk add openssh”和“ apk add openrc”。 使用“ rc-service sshd start”,我已经启动了ssh服务。 现在,我要使用“ scp”复制文件。
从服务器容器中键入: scp myfile.txt client@172.17.0.3:/ location_of_the_folder
询问客户端容器的密码。 我能做什么? Docker容器的默认密码是什么?
我尝试了以下3种选择:
我不想使用选项1和2。 我应该使用Shell脚本为选项3做什么?我想使这件事自动化。 我可以手动执行操作,但是可以通过使用Shell脚本自动执行操作来将一些文本从一个容器复制到另一个容器吗?
答案 0 :(得分:0)
如果您确实需要ssh
,请在正在运行的容器中尝试以下步骤:
/etc/ssh/sshd_config
,取消注释以PermitRootLogin
开头的行,然后更改为:PermitRootLogin yes
。# rc-service-sshd restart
。# passwd
然后按照您的操作从其他容器进行连接。
docker cp
的另一个选项是here。
答案 1 :(得分:0)
通常,Docker Linux分发基础映像会为所有用户禁用所有密码。另外,您要描述的设置具有很多凭据要管理(在每个映像中,本地用户的密码,远程用户的密码,您自己的ssh主机密钥,远程ssh主机密钥),并且安全地进行此操作很棘手。 (例如,如果您在Dockerfile
中设置了密码,那么拥有该图片的任何人都可以从docker history
中读取该密码,或者尝试从该图片的/etc/shadow
文件中破解散列密码。 )
我建议避免在Docker中使用ssh。它避免了上面显示的凭据问题,也避免了在容器中运行多个进程的固有困难。
这里最简单的方法是将端点添加到可以生成文件内容的“服务器”,并让“客户端”在启动时或需要时请求它。
您还可以将相同名称的Docker卷或主机目录安装到两个容器中,并且这两个容器都将对同一文件具有读写访问权限,因此您可以通过这种方式传输文件。通常不必担心,但是存在潜在的竞争条件(就像您在没有Docker的同一系统上运行两个系统一样)。这种方法也不适用于Docker Swarm或Kubernetes等多主机安装。