web-dev-qa-db-ja.com

DockerポートをホストコンテナーのUNIXファイルソケットに転送できますか?

次のコマンドを実行すると失敗します。

Sudo docker run -p unix:///tmp/file.sock:44444 -d image_name

ポート転送構文に何か問題がありますか、それともこのような構成は不可能ですか?

22
Ed Sullivan

Dockerの-p構文は、UNIXソケットを使用しません。

-p=[]      : Publish a container᾿s port to the Host (format:
             ip:hostPort:containerPort | ip::containerPort |
             hostPort:containerPort)

1つの解決策は次のとおりです。

  • -p指定なしでコンテナを実行します。名前は"cont1"--name cont1)とします
  • 次のコンテナを実行します。
    • Bind mounts コンテナ内からアクセスできるようにするUNIXソケット(-v /tmp/file.sock:/tmp/file.sock
    • Links 最初のコンテナー(--link cont1:cont1)に接続できるようにする
    • socat などのツールを実行して、unixソケットから"cont1:4444"エンドポイントにトラフィックをルーティングします

私はsocatのエキスパートではありませんが、必要なアドレス指定は次のようになります。UNIX-LISTEN:/tmp/file.sock,fork,reuseaddr TCP4:cont1:4444

27
icecrime

受け入れられる答えは部分的に正しいですが、リンクできるのはディレクトリのみなので、ソケット自体ではなくソケットのディレクトリをリンクする必要があります。

以下は、postgresソケットを接続したいときに私のために行いました。

docker run -p 5432:5432 -v /run/postgresql:/run/postgresql -d --name postgres postgres

これにより、postgresソケットファイルがホストシステムにリンクされます。

6
Vasspilka