我想使用rsub 包对于 Sublime Text,为了在远程服务器上运行的 Docker 容器内编辑代码。但是当我执行
rsub my_code.py
我收到错误:
/usr/local/bin/rsub: connect: Cannot assign requested address
/usr/local/bin/rsub: line 392: /dev/tcp/localhost/52698: Cannot assign requested address
第 392 行基本上对应于该指令:
exec 3<> "/dev/tcp/localhost/52698"
bash: connect: Cannot assign requested address
bash: /dev/tcp/localhost/52698: Cannot assign requested address
如果我退出 Docker 容器并在远程服务器上运行相同的指令,它会正常工作(或者至少不会给我任何错误消息)。你能帮我解决这个问题吗?如果需要,我可以修改 Dockerfile。如果您认为有必要,我也可以在这里发布它,但我应该先对其进行一些修改以删除敏感信息。
编辑:我包含了引发错误的脚本部分rsub
。请注意,此时脚本中的$host=localhost
和$port=52698
。我仔细检查了 withecho
语句。
# connect to textmate and send command
#
exec 3<> "/dev/tcp/$host/$port"
if [ $? -gt 0 ]; then
echo "Unable to connect to TextMate on $host:$port"
exit 1
fi
read -r server_info 0<&3
log $server_info
for i in "${!filepaths[@]}"; do
open_file "$i"
done
echo "." 1>&3
if [[ $nowait = true ]]; then
exec </dev/null >/dev/null 2>/dev/null
( (handle_connection &) &)
else
handle_connection
fi
编辑:我被问及主机操作系统。这是uname -a
当在远程主机上时的结果,并且外部Docker 容器(已删除服务器名称):
Linux xxxxxxx 4.4.0-104-generic #127-Ubuntu SMP Mon Dec 11 12:16:42 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
这是运行同一命令的结果里面Docker 容器:
Linux yyyyyyyyy 4.4.0-104-generic #127-Ubuntu SMP Mon Dec 11 12:16:42 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
xxxxxxx
和yyyyyyy
是不同的字符串。此外,在 Docker 容器内,我无法在目录tcp
内找到任何目录dev
:
root@7f199087c883:~# ls /dev/tcp
ls: cannot access '/dev/tcp': No such file or directory
答案1
最后,由于rsub
正在远程主机上工作,最简单的解决方案是:
- 登录远程主机(不启动容器)
- 用于
rsub
在本地 PC 上的 Sublime 会话中编辑远程主机上的任何文件 - 然后再次构建容器。
它有点慢,因为每次我做出更改时都需要重建,但是:
- 远程主机具有很强的计算能力,因此重建很快;
- 无论如何,这是一种更好的工作方式:每次我提交对项目的更改时,我都应该重建容器。这会促使我更频繁地提交更改,这始终是一个好主意 :-)