无法在 Docker 容器内分配地址

无法在 Docker 容器内分配地址

我想使用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

xxxxxxxyyyyyyy是不同的字符串。此外,在 Docker 容器内,我无法在目录tcp内找到任何目录dev

root@7f199087c883:~# ls /dev/tcp
ls: cannot access '/dev/tcp': No such file or directory

答案1

最后,由于rsub正在远程主机上工作,最简单的解决方案是:

  • 登录远程主机(不启动容器)
  • 用于rsub在本地 PC 上的 Sublime 会话中编辑远程主机上的任何文件
  • 然后再次构建容器。

它有点慢,因为每次我做出更改时都需要重建,但是:

  • 远程主机具有很强的计算能力,因此重建很快;
  • 无论如何,这是一种更好的工作方式:每次我提交对项目的更改时,我都应该重建容器。这会促使我更频繁地提交更改,这始终是一个好主意 :-)

相关内容