如何在本地计算机和Minikube之间传输文件?

30

我正在使用Ubuntu 16.0.4操作系统,并在其上安装了minikube。 我需要将一些文件复制到minikube中,那我该怎么做呢? 我尝试了下面的命令但它要求输入密码,而我不知道密码是什么。

scp /media/myuser/sourceFolder docker@192.168.99.100:/home/docker/destiationFolder

注意: minikube的IP地址为192.168.99.100,我在minikube中使用docker作为默认用户,但实际上我不知道是否正确。

那么minikube的默认用户名和密码是什么,如何将文件从我的本地计算机复制到minikube中呢?

谢谢 :)


我相信访问您的minikube机器的私钥位于 ~/.minikube/machines/*/id_rsa(据我所知,在boot2docker中,docker用户没有密码)。 - mdaniel
作为后续,至少在 minikube v0.21.0 中,有一个专门的 minikube ssh-key 命令,它将输出到 id_rsa 的路径(它正好在我说的地方,但是 minikube ssh-key 可能是更便携的获取该路径的方式)。 - mdaniel
简单的方法:minikube默认挂载用户主目录。在我的情况下,我通过VirtualBox在Windows 10上运行minikube,我的c:\Users文件夹映射到minikube VM内部的/c/Users文件夹。 - Cosmin Sontu
10个回答

51

在主机上,您可以使用minikube命令的ssh-keyip子命令:

scp -i $(minikube ssh-key) <local-path> docker@$(minikube ip):<remote-path>

那么问题中的命令变成了:

scp -i $(minikube ssh-key) /media/myuser/sourceFolder docker@$(minikube ip):/home/docker/destiationFolder

如果用户已经进入了minikube并想要从那里进行scp(反之亦然),记录应该在哪里运行将会很有帮助。请注意,这里只翻译文本内容,不进行解释。 - vhs
2
我尝试使用命令 scp -i $(minikube ssh-key) ~/.docker/config.json docker@$(minikube ip):/var/lib/kubelet/config.json,但是我收到了一个 Permission denied 错误。 - Kamafeather
2
我遇到了以下错误,你有任何想法它可能来自哪里吗? ssh: connect to host 192.168.49.2 port 22: Operation timed out lost connection - Aurelien Montmejat
我运行了 PS C:\Users\REDACTED> scp -i $(minikube ssh-key) "C:\Users\REDACTED\Desktop\REDACTED.sql" docker@$(minikube ip):/var/opt/mssql,但是出现了以下错误:ssh: connect to host REDACTED port 22: Connection timed out - Exegesis

24

我按照以下步骤处理:

1- 进入minikube的ssh>> minikube ssh

2- 使用sudo更改docker密码>> sudo passwd docker 并创建新密码,现在我知道了docker用户密码

3- 退出ssh并返回Ubuntu终端>> exit

4-使用scp命令将文件复制到minikube>> scp /local/path/to/file/ docker@minikubeIp:/your/destination/folder/

例如: scp -r /media/myuser/sourceFolder docker@192.168.99.100:/home/docker

之后它只要求输入minikube的docker用户密码,我已经更改过了,然后输入密码,文件夹就成功从本地机器复制到minikube中了


11
补充一点,您可以使用访问密钥而无需更改minikube上“docker”用户的密码: scp -i ~/.minikube/machines/minikube/id_rsa -r /folder2copy docker@192.168.99.100:/home/docker - ibaralf
在我所使用的scp版本中,我没有看到-i选项。 - Jason Rowe
我收到了连接被拒绝的错误信息。 - Happy Machine
@HappyMachine 抱歉,您能分享一下导致连接被拒绝的命令吗? - mibrahim.iti

4
在minikube 1.7中,如果使用VirtualBox驱动程序,则存在一个名为/hosthome的文件夹被挂载到minikube虚拟机中。这是一个VirtualBox共享文件夹,映射到主机系统的/home

因此,实际上,如果您ssh到minikube虚拟机中,您的主文件夹中的所有内容都是可读的,并且您可以使用普通的cp命令来复制内容。

4

4
作为一个小细节,我认为问题是关于将文件复制到minikube机器本身,而不是任何特定的Pod中。但是,您的命令对于将文件传输到正在运行的Pod中是100%准确的。 - mdaniel
我同意@MatthewLDaniel的观点,即kubectl适用于将文件复制到pod中,但不适用于minikube机器本身,因此此命令将无法工作,您可以自行测试。 - mibrahim.iti
抱歉,我误解了问题。通常我会在minikube中运行pods。请问将文件复制到minikube的用例是什么? - sfgroups
@sfgroups 想知道如何将文件复制到minikube的用例吗?请查看我的答案,我写了具体步骤,希望能对你有所帮助 :) - mibrahim.iti

3

您可以使用minikube cp将指定文件复制到minikube中。

minikube cp <source file path> <target node name>:<target file absolute path> [flags]

如果您不知道目标节点的名称,可以首先运行 minikube node list 来获取节点名称。更多信息可以在官方文档中找到。


1
如果您已经安装了Minikube Windows主机,则可以在其中找到Docker用户(Docker用户位于Minikube虚拟机中)的SSH公钥和私钥。位置如下:
C:\Users\{yourusername}\.minikube\machines\minikube

在 Windows 主机上。

这些文件是在虚拟机创建期间由 minikube.exe 复制的。

这些文件是 id_rsa 和 id_rsa.pub。

然后在 puttygen 中打开 id_rsa 并将私钥保存为 .ppk 格式。

之后,您可以使用新保存的私钥与 Winscp 一起使用。

主机名:您的 minikube 虚拟机的 IP 地址(可以使用 c:\minikube ip 获取)

用户名:docker

端口:22

转到高级 ---> 高级 ---> SSH ---> 认证 ---> 私钥文件

然后打开...


1
在我的 M1 MacBook 上,从 @Drik 复制的解决方案并没有像预期那样工作,而是出现了一些错误,例如:
ssh: connect to host 192.168.49.2 port 22: Operation timed out lost connection

附注:在撰写本文时,我唯一能够正确运行minikube的方法是通过minikube + docker驱动程序在AppleSilicon Mac上运行。
我看到了@afbjorklund在this post中所说的话。
“不幸的是,与其他驱动程序不同,Docker桌面版没有直接访问VM的选项。”
尽管有通过docker隐藏隧道端口连接的选项。
解决方案(minikube + docker驱动程序)
我将所有这些拼凑在一起,最终成功使用minikube + docker驱动程序在M1上复制文件。
$ docker port <CONTAINER_ID>
22/tcp -> 127.0.0.1:58408
2376/tcp -> 127.0.0.1:58409

scp -i $(minikube ssh-key) -P 58408 /media/myuser/sourceFolder docker@127.0.0.1:/home/docker/destiationFolder

0

将所需的文件/文件夹复制到minikube机器的步骤。

minikube ssh
sudo su root
scp -r <user>@<ip address of linux machine>:<SOURCE FOLDER PATH> <DESTINATION FOLDER PATH>
scp -r user@192.145.34.23:/home/userhome/sourfolder /etc/destinationfolder
Enter password of linux machine

0

正如其他人已经提到的那样,最简单的方法是 -

minicube cp <source-file> <absolute-path/target-file>


0

正如其他答案已经提到的那样,您可以将本地目录挂载到Minikube上

minikube mount <源目录>:<目标目录>

这非常有用,因为您可以在两个方向上移动文件,并使用它轻松检查在Minikube内完成的任何工作的输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接