这让我疯了,但出于某种原因,我无法从外面访问某些端口.我几乎检查了所有可能的设置,但我不知道为什么这不起作用.我不知道在哪里解决这个问题(Ubuntu防火墙与Docker vs. Dovecot vs. Postfix),我真的希望你们能帮助我.
仅供参考:mycooldomain.com只是我域名的占位符,目前我不想分享.
我会为帮我解决这个问题的人买一杯啤酒!:)
简介
在我的根服务器上,我正在运行以下docker邮件服务器容器(https://github.com/tomav/docker-mailserver/),它暴露了几个端口(143,25,587,993).容器运行dovecot(IMAP)和后缀(SMTP).
TL;博士
我有上述邮件服务器(dovecot,postfix)在docker容器中运行,只能连接到一个端口(143 - IMAP).其他端口25,587和993无法从外部访问 - 仅可从主机直接访问.Docker正确公开它们并正确地列在iptables中.容器中的日志(dovecot,postfix)在请求进入时没有显示任何反应(没有被拒绝的请求或类似的东西),所以我想它们永远不会到达容器中的服务.其他docker容器端口(例如我的web服务器:80,443).
这是详细信息:
我可以直接从主机连接到每个端口(让我们测试IMAP安全端口):
mastix@localhost:~$ telnet mail.mycooldomain.com 993
Trying xxx.xxx.xxx.xxx…
Connected to mail.mycooldomain.com.
Escape character is '^]'.
220 mail.mycooldomain.com ESMTP Postfix (Ubuntu)
Run Code Online (Sandbox Code Playgroud)
但不是来自我的本地机器:
mastixmc$ telnet mail.mycooldomain.com 993
Trying xxx.xxx.xxx.xxx…
telnet:connect to address xxx.xxx.xxx.xxx: Operation timed out
telnet: Unable to connect to remote host
Run Code Online (Sandbox Code Playgroud)
docker-compose ps告诉我他们暴露并正确绑定:
110/tcp,
0.0.0.0:143-143/tcp,
0.0.0.0:25->25/tcp, 4190/tcp,
0.0.0.0:587->587/tcp,
0.0.0.0:993->993/tcp, 995/tcp
Run Code Online (Sandbox Code Playgroud)
netstat -ntlp 告诉我同样的事情:
Proto Recv-Q Send-Q Local Address …Run Code Online (Sandbox Code Playgroud) 好,朋友们,
这让我疯了......无法让我的nodejs应用程序在覆盆子pi上自动启动@boot ...
机器:覆盆子2(Raspbian Jessie)
尝试了我在Google上找到的几乎所有可能的解决方案.
这就是我最终得到的结果:
安装pm2
$ sudo npm install -g pm2
Run Code Online (Sandbox Code Playgroud)
这将安装为init.d脚本并以pi用户身份运行应用程序
$ sudo pm2 startup raspberry -u pi
[PM2] Generating system init script in /etc/init.d/pm2-init.sh
[PM2] Making script booting at startup...
[PM2] -raspberry- Using the command:
su -c "chmod +x /etc/init.d/pm2-init.sh && update-rc.d pm2-init.sh defaults"
[PM2] Done.
Run Code Online (Sandbox Code Playgroud)
我已经读过脚本引用了错误的.pm2文件夹(看起来在根文件夹中,而不是用户的文件夹中)所以我改变了
$ sudo vi /etc/init.d/pm2-init.sh
Run Code Online (Sandbox Code Playgroud)
改变export PM2_HOME="/root/.pm2"以export PM2_HOME="/home/pi/.pm2"
$ cd /opt/mycoolnodeproject
Run Code Online (Sandbox Code Playgroud)
用pm2启动我的节点项目
$ pm2 start server.js -x --name "node-project"
Run Code Online (Sandbox Code Playgroud)
保存活动进程,以便在重新启动时重新启动它们(如果pi崩溃,它会自动将其保存在关闭状态)
$ pm2 dump
Run Code Online (Sandbox Code Playgroud)
所以现在服务器启动并运行正常......直到我重新启动!我以为pm2会自动启动我的节点应用程序但由于某种原因它不会...... :(
知道问题可能是什么? …
autostart ×1
docker ×1
dovecot ×1
node.js ×1
pm2 ×1
ports ×1
postfix-mta ×1
raspberry-pi ×1
raspbian ×1
ubuntu ×1