Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Windows上安装docker套接字?_Docker_Traefik_Docker For Windows - Fatal编程技术网

如何在Windows上安装docker套接字?

如何在Windows上安装docker套接字?,docker,traefik,docker-for-windows,Docker,Traefik,Docker For Windows,我正在尝试让一个只在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 lb: image: load

我正在尝试让一个只在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
  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
第一个卷在Mac或Linux上运行良好,但在Windows上运行吗?它可能和那个体积有关。启动图像时,套接字看起来像一个套接字:

/ # 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
根据我在网上找到的各种文章和bug报告。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 ../
/ # 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 ../
/ # 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
部分如下所示:

volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro,delegated
- ${PWD}/load_balancer/traefik.toml:/etc/traefik/traefik.toml:ro,delegated
  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的Linux docker映像的。我知道我可以通过在另一台机器上安装Linux或在Windows机器上安装VM在Linux主机上运行它,这是等效的。运行Windows来宾也不是我想要的,因为有一种方法可以只将套接字从Windows暴露到Windows。

在Docker Desktop for Windows上,客户端可以通过命名管道连接到Docker引擎:
npipe:////./pipe/docker_engine

又见此,

windows版本的docker不使用unix套接字(
/var/run/docker.sock
),而是使用npipe(
npipe:////./pipe/docker_engine
)。所以你要么

  • 切换到linux容器,该容器在带有unix套接字的完全虚拟化linux中运行docker
  • 将npipe而不是unix套接字传递到容器(仅限windows容器)
  • 使用网络套接字(应与linux和windows容器配合使用)

但是,由于这是一个Linux容器,您可以选择a)在虚拟机中运行docker(上面的第一个选择),或者B)使用网络套接字(第三个选择)。

无法对绑定装载的类型使用简短语法:
npipe:////./pipe/docker_engine:/var/run/docker.sock:ro,委托

您需要在撰写文件中使用长语法:

volumes:
  - type: npipe
    source: ////./pipe/docker_engine
    target: /var/run/docker.sock
    consistency: delegated
您可以在中找到一些关于长语法的文档。此语法来自v3.2


还请记住@lucas ramage所说的仅在使用npipe时使用windows容器

如果您不能也不想使用网络套接字,则可以使用命名管道。 语法取决于您是运行Linux还是Windows容器以及所使用的shell

Linux容器 如果您在Windows计算机上运行Linux容器,这似乎可以使用Powershell或bash:

docker-run-rm-it-v//var/run/docker。sock://var/run/docker.sock“图像\u与\u docker docker版本
请注意源卷和目标卷的
/
前面的额外
/var/run/docker.sock

Windows容器 如果您在Windows计算机上运行Windows容器,这似乎可以使用Powershell或bash:

docker-run-v///pipe/docker_engine://./pipe/docker_engine“--rm-具有docker docker版本的it映像
请注意,这仅适用于Powershell:

docker-run-v“\\.\pipe\docker\u引擎:\\.\pipe\docker\u引擎”--rm-it图像与docker-docker版本
因此,最好使用带有
/
的版本

额外-docker-compose.yml 如果使用docker-compose.yaml文件,则该文件适用于Windows容器

版本:“3.7”
服务:
码头工人:
图像:与docker的图像
命令:
-码头工人
-版本
卷数:
-类型:npipe
来源:\\.\pipe\docker\u引擎
目标:\\.\pipe\docker\u引擎
对于Linux容器,您可以使用缩写形式:

docker:
图像:与docker的图像
命令:
-码头工人
-版本
卷数:
-//var/run/docker。sock://var/run/docker.sock
额外库伯内特斯 如果您在Kubernetes中的Windows节点上运行Windows容器,则这似乎是可行的:

apiVersion:v1 种类:豆荚 规格: 容器: -姓名:docker 图像:与docker的图像 命令: -动力壳 args: -开始睡觉 - "999999" 体积数量: -装载路径:\\.\pipe\docker\u引擎 名称:dockersock 卷数: -名称:dockersock 主机路径: 路径:\\.\pipe\docker\u引擎 类型:null 节点选择器: kubernetes.io/os:windows 在这种情况下,除了使用
\
,请注意dockersock卷定义中的
类型:null
:如果不设置它,它将不起作用

笔记 一切都在docker 19.03和Kubernetes 1.18上进行了测试

Client:
 Version:           19.03.3
 API version:       1.40
 Go version:        go1.12.10
 Git commit:        2355349d-
 Built:             10/14/2019 16:41:26
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.24)
  Go version:       go1.12.17
  Git commit:       afacb8b
  Built:            Wed Mar 11 01:37:20 2020
  OS/Arch:          windows/amd64
  Experimental:     false

如果在windows上遇到以下错误:

无法为服务portainer创建容器:无法识别的卷规范:文件“\。\pipe\docker\u engine”无法映射。此平台上只能映射目录 错误:在启动项目时遇到错误

尝试向其添加一个额外的斜杠,从而生成以下卷部分:

volumes:
  - source: \\.\pipe\docker_engine\
    target: \\.\pipe\docker_engine\
    type: npipe

使用compose
3.7
和docker CE
19.03.12

进行测试,这有帮助吗@TarunLalwani:这就是我学习/pipe/docker\u引擎的地方,但是这两个链接都没有提到
卷:
,所以我不确定语法是什么。这种语法没有崩溃,但我不确定它是否有效(docker映像不起作用,但我不知道这是否与套接字或其他内容有关)。您能提供整个docker文件以便我们尝试找出答案吗?我认为术语有误导性-您绑定了