我正在尝试将ftp服务器NodeJS应用程序打包。当我使用npm运行它时,它工作得很好,但当我在容器中运行它时它没有响应。
这是节点应用程序:src/index.js文件
const FtpSvr = require ( 'ftp-srv' );
const hostname = '127.0.0.1';
const port = 21;
const ftpServer = new FtpSvr ({
url:`ftp://${hostname}:${port}`,
anonymous:true
} );
ftpServer.on('login', ({connection, username, password}, resolve, reject) =>
{
resolve({root : "./"})
connection.on('STOR', (error, fileName) => {
console.log("STOR")
});
});
ftpServer.on ( 'client-error', (connection, context, error) =>
{
console.log ( `error: ${error}` );
});
ftpServer.listen().then(() => {console.log(`Server running at http://${hostname}:${port}/`);});
我的包.json 文件
{
"name": "ftp-server",
"version": "1.0.0",
"description": "FTP server to receive images from cameras and save them on Azure Blob storage",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node src/index.js"
},
"author": "Rakshak",
"license": "ISC",
"dependencies": {
"ftp-srv": "4.3.4"
}
}
我的docker文件
FROM node:12
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
EXPOSE 20-21
EXPOSE 65500-65515
CMD ["npm", "start"]
我正在使用FileZilla测试FTP服务器。当我使用npm运行服务器时,启动并使用FileZilla连接
Connecting to 127.0.0.1:5000...
Status: Connection established, waiting for welcome message...
Status: Insecure server, it does not support FTP over TLS.
Status: Logged in
Status: Retrieving directory listing...
Status: Directory listing of "/" successful
我正在使用此命令构建docker映像
docker build -t rrakshak/ftp-demo .
我用这个来运行码头
docker run -p 5000:5000 rrakshak/ftp-demo:latest
这是FileZilla控制台上的消息
Connecting to 127.0.0.1:5000...
Status: Connection established, waiting for welcome message...
Error: Connection closed by server
Error: Could not connect to server
Status: Waiting to retry...
Status: Connecting to 127.0.0.1:5000...
Status: Connection established, waiting for welcome message...
Error: Connection closed by server
Error: Could not connect to server
当服务器在容器内运行时,FileZilla可以连接,但没有收到预期的文件列表响应。
------------更新-----------------------
将主机设置为0.0.0。在Filezilla上给我一组新消息
Status: Connecting to 127.0.0.1:21...
Status: Connection established, waiting for welcome message...
Status: Insecure server, it does not support FTP over TLS.
Status: Logged in
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/"
Command: TYPE I
Response: 200 Switch to "binary" transfer mode.
Command: PASV
Response: 502 Command not supported
Command: PORT 127,0,0,1,231,209
Response: 500 The given address is not yours
Error: Failed to retrieve directory listing
为什么我的应用程序在节点中运行时有效,而在容器化时无效?
尝试绑定到 0.0.0.0
。由于您在 Docker 中运行,因此绑定到 127.0.0.1
不起作用,因为请求将来自外部(至少从 Docker 容器的角度来看)。
有关解决此类网络问题的提示,您可以在相关问题的答案中找到一些想法。
监听容器中的< code>0.0.0.0:5000,并定义被动端口
const FtpSvr = require ( 'ftp-srv' );
const hostname = '0.0.0.0';
const port = 5000;
const ftpServer = new FtpSvr ({
url: `ftp://${hostname}:${port}`,
anonymous: true,
pasv_url: `ftp://${hostname}:${port}`,
pasv_min: 65500,
pasv_max: 65515,
});
按原样构建容器,然后使用映射的以下端口运行,这些端口都可以在 ftp 连接中使用:
docker run -p 5000:5000 -p 65500-65515:65500-65515 --rm rrakshak/ftp-demo
给出响应:
$ curl ftp://localhost:5000
-rw-r--r-- 1 1 1 141 Oct 21 01:22 Dockerfile
drwxr-xr-x 1 1 1 4096 Oct 21 01:21 node_modules
-rw-r--r-- 1 1 1 21137 Oct 21 01:21 package-lock.json
-rw-r--r-- 1 1 1 52 Oct 21 01:21 package.json
-rw-r--r-- 1 1 1 660 Oct 21 01:23 server.js
-rw-r--r-- 1 1 1 20287 Oct 21 01:21 yarn.lock
ftp客户端必须设置为使用被动模式。
当 FTP 客户端处于活动模式时,FTP 服务器从客户端接收 PORT
命令,并创建一个新的 TCP 连接,从容器返回到客户端,以获取该端口
上的数据。
由于Docker端口映射到容器中,此数据连接的源地址通常与FTP客户端用作FTP服务器初始目标的地址不匹配。在经典服务器上的NAT后面设置FTP服务器时也会出现类似的问题。
在独立AEM安装中,felix OSGi容器是否存在于jetty servlet容器中?或者Jetty服务器是作为捆绑包安装在Felix OSGi容器中的? AEM启动时,哪一个将首先启动? 对于基于战争的安装,这将如何改变? 根据这个答案,两者都是可能的。但我想知道AEM采用哪种方法。
单击关闭程序后,浏览器中出现另一个错误: 详细的编译器输出如下所示: C:\程序文件(x86)\IIS Express>D:_myurl\bin\roslyn\csc.exe/T:Library/utf8output/nostdlib+/R:“C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll”/R:“C:\Windows\Micr
我有个问题希望你能帮我解决。 有时,我的应用程序会出现一些错误,并继续在服务器上运行,直到我手动停止服务器并重新启动。
我正在使用插件Goup-server-li的负载。 如何停止服务器? 我尝试了server.restart(),server.kill(),server.reset() 但总是有这样的错误: 未捕获错误:在Object.exports处侦听EADDRINUSE 127.0.0.1:35729_导出时出现errnoException(util.js:1022:11)_服务器上的exceptionWi
错误:container_linux.go:247:启动容器进程导致“exec:\”-w\“:在$path中找不到可执行文件”c:\program files\docker toolbox\docker.exe:来自守护进程的错误响应:oci运行时错误:container_linux.go:247:启动容器进程导致“exec:\”-w\“:在$path中找不到可执行文件”。
这里是android manifest的代码,这里是运行模拟器时调试错误消息的链接。当我点击Run或debug按钮时,模拟器出现了,但应用程序显示“AppName停止工作”,我感觉问题不是在android Manifest.xml中,就是在Java代码中。在android清单中,错误代码位于 “android:name=”com.example.quiz.FullScreenActivity“”