记录一次通过File协议传输文件部署到Docker不生效的问题

C# 使用WebClient 或者 FileWebRequest 将文件传输到file协议(地址格式类似: file://192.168.111.11/file/)的远程服务器地址,Windows环境调试正常,部署到线上环境(Docker容器)发现,没有报错,远程服务器文件夹中没有传输成功,附加调试也未发现异常。

两种方式的写法如下:

  1. WebClient
var ftpPath = "file://192.168.111.11/FTPFile/filename.txt";
WebClient client = new WebClient();
client.Credentials = new NetworkCredential(username, password);
client.UploadFile(new Uri(ftpPath), filePath);
  1. FileWebRequest
// 创建FTP请求
var ftpPath = "file://192.168.111.11/FTPFile/filename.txt";
FileWebRequest ftpRequest = (FileWebRequest)WebRequest.Create(ftpPath);
ftpRequest.Credentials = new NetworkCredential(username, password);
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;

// 上传文件
using (Stream ftpStream = ftpRequest.GetRequestStream())
    using (FileStream fileStream = File.OpenRead(filePath))
{
    fileStream.CopyTo(ftpStream);
}

在附加调试的时候发现FileWebRequest处理的时候,ftpStream的Name属性为/app\\\\192.168.111.11\FTPFile\filename.txt

由于/app为配置的docker容器的工作路径,在容器内部的app目录果然找到了 \\192.168.111.11\FTPFile\filename.txt文件,gpt查询知道

在Docker容器中,file://协议将被解释为容器内部的本地路径,而不是宿主机的路径。这意味着如果你在Docker容器中使用file://协议指向某个路径,该路径将被视为容器内部的路径,而不是宿主机上的路径。

要访问宿主机上的文件,你需要将宿主机的文件挂载到容器中。在Docker中,可以通过-v--volume选项来挂载宿主机上的文件或目录到容器中。例如,你可以使用以下命令来运行一个带有挂载目录的容器:

docker run -v /host/path:/container/path -it your_image

这将把宿主机上的/host/path目录挂载到容器内的/container/path目录中。然后,在容器中,你可以使用/container/path访问宿主机上的文件。

因此,如果你想在Docker容器中使用file://协议访问宿主机上的文件,你需要首先将宿主机上的文件挂载到容器中。

后面准备试一试部署ftp服务器,使用ftp协议传输。

转载请标明出处:记录一次通过File协议传输文件部署到Docker不生效的问题

作者:Niko

欢迎访问我的主页:vlins.cn

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇