次のコマンドを実行すると失敗します。
Sudo docker run -p unix:///tmp/file.sock:44444 -d image_name
ポート転送構文に何か問題がありますか、それともこのような構成は不可能ですか?
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
)とします-v /tmp/file.sock:/tmp/file.sock
)--link cont1:cont1
)に接続できるようにするsocat
などのツールを実行して、unixソケットから"cont1:4444"
エンドポイントにトラフィックをルーティングします私はsocatのエキスパートではありませんが、必要なアドレス指定は次のようになります。UNIX-LISTEN:/tmp/file.sock,fork,reuseaddr TCP4:cont1:4444
受け入れられる答えは部分的に正しいですが、リンクできるのはディレクトリのみなので、ソケット自体ではなくソケットのディレクトリをリンクする必要があります。
以下は、postgresソケットを接続したいときに私のために行いました。
docker run -p 5432:5432 -v /run/postgresql:/run/postgresql -d --name postgres postgres
これにより、postgresソケットファイルがホストシステムにリンクされます。