web-dev-qa-db-ja.com

Windowsでdockerソケットをどのようにマウントしますか?

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のみにソケットを公開する方法があります。

7
pupeno

バインドマウントのタイプで短い構文を使用することはできません: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コンテナーを使用する

1
Marc ABOUCHACRA

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番目の選択肢)。

0
rage