Unicesでのみ開発されたWindowsでアプリケーションを動作させようとしています。すべてドッキングされており、traefikロードバランサーを使用しています。 traefikを実行するためのdockerのボリュームは次のようになります。
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro,delegated
- ${PWD}/load_balancer/traefik.toml:/etc/traefik/traefik.toml:ro,delegated
最初のボリュームはMacまたはLinuxでは問題なく動作しますが、Windowsでは動作しますか? アプリケーションが失敗しています(ロードバランサーが404を提供しています) であり、そのボリュームに関連している可能性があります。イメージを開始すると、ソケットはソケットのように見えます。
/ # ls -laF /var/run/docker.sock
srw-rw---- 1 root root 0 Sep 2 11:04 /var/run/docker.sock=
これは稼働していますか?それをテストする方法はありますか?これを行う正しい方法は何ですか?
これを理解しようとして、私はそれをこれに置き換えてみました:
volumes:
- //./pipe/docker_engine:/var/run/docker.sock
オンラインで見つけたさまざまな記事やバグレポートに基づいています。 Dockerイメージが起動しますが、同じ方法で失敗し、Dockerコンテナーではディレクトリのように見えます。
/ # ls -laF /var/run/docker.sock
total 4
drwxr-xr-x 2 root root 40 Sep 3 14:52 ./
drwxr-xr-x 1 root root 4096 Sep 3 14:57 ../
Marc ABOUCHACRAの回答に従って、私は試してみました。
volumes:
- type: npipe
source: ////./pipe/docker_engine
target: /var/run/docker.sock
consistency: delegated
しかし、それもディレクトリのように見えます:
/ # ls -laF /var/run/docker.sock
total 4
drwxr-xr-x 2 root root 40 Sep 3 14:52 ./
drwxr-xr-x 1 root root 4096 Sep 3 14:57 ../
私もこれを試しました:
volumes:
- npipe:////./pipe/docker_engine:/var/run/docker.sock:ro,delegated
しかし、それはこのエラーで失敗します:
ERROR: Volume npipe:////./pipe/docker_engine:/var/run/docker.sock:ro,delegated has incorrect format, should be external:internal[:mode]
全体 docker-compose.yml
セクションは次のようになります。
lb:
image: load-balancer
build: ${WORKSPACE}/go-home/load_balancer
ports:
- 80:80
- 443:443
links:
- wifi-ui-dev
- wifi-ui-prod
- portal
- wifi-api
env_file:
- .env
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro,delegated
- ${PWD}/load_balancer/traefik.toml:/etc/traefik/traefik.toml:ro,delegated
私の質問は、Windows Docker for Windowsを実行しているWindowsホスト上でLinuxであるこのDockerイメージを実行することについて具体的にです。 Linuxを別のマシンにインストールするか、VMをWindowsマシンにインストールすることで、Linuxホストで実行できることを理解しています。これは同等です。Windowsゲストの実行は、 WindowsからWindowsのみにソケットを公開する方法があります。
バインドマウントのタイプで短い構文を使用することはできません:npipe:////./pipe/docker_engine:/var/run/docker.sock:ro,delegated
構成ファイルで長い構文を使用する必要があります。
volumes:
- type: npipe
source: ////./pipe/docker_engine
target: /var/run/docker.sock
consistency: delegated
長い構文についてのドキュメントは official documentation にあります。この構文はv3.2からのものです
また、@ lucas-ramageが言ったことについても覚えておいてくださいnpipeを使用する場合にのみWindowsコンテナーを使用する。
Docker for Windows FAQ によると、
Windows用のDockerデスクトップでは、クライアントは名前付きパイプを介してDockerエンジンに接続できます:
npipe:////./pipe/docker_engine
こちらもご覧ください GitHubの問題 、
Windows版のdockerはUNIXソケット(
/var/run/docker.sock
)を使用せず、npipe(npipe:////./pipe/docker_engine
)を使用します。だからあなたはどちらかを持っています
- unixソケットを備えた完全仮想化LinuxでDockerを実行するLinuxコンテナーに切り替える
- uNIXソケットの代わりにnpipeをコンテナーに渡す(Windowsコンテナーのみ)
- ネットワークソケットを使用するには(LinuxおよびWindowsコンテナで動作するはずです)
ただし、これはLinuxコンテナーであるため、オプションはA)Dockerを仮想マシンで実行する(上記の最初の選択肢)、またはB)ネットワークソケットを使用します(3番目の選択肢)。