web-dev-qa-db-ja.com

Dockerコンテナー内のアドレスを割り当てることはできません

リモートサーバーで実行されるDockerコンテナー内のコードを編集するために、Sublime Textに rsubパッケージ を使用したいと思います。しかし、私が実行するとき

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に注意してください。 echoステートメントでそれを再確認しました。

# 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

編集:ホストOSについて尋ねられました。これは、リモートホスト上でのuname -aoutsideDockerコンテナ(サーバー名は削除)の結果です。

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コンテナ内でinsideを実行したときの同じコマンドの結果です:

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
3
DeltaIV

結局、rsubはリモートホストで動作していたため、最も簡単な解決策は次のとおりでした。

  • リモートホストにログオンします(コンテナを起動せずに)
  • ローカルPCのSublimeのセッションで、rsubを使用してリモートホスト上のファイルを編集します。
  • その後、コンテナを再度ビルドします。

変更を加えるたびに再構築する必要があるため、少し遅いですが、

  • リモートホストには多くの計算能力があるため、再構築は迅速です。
  • とにかく作業するより良い方法です:プロジェクトに変更をコミットするたびに、とにかくコンテナを再構築する必要があります。これにより、変更をより頻繁にコミットするように促されます。これは常に良いアイデアです:-)
3
DeltaIV