从同一网络上的远程计算机连接到Windows docker桌面

从同一网络上的远程计算机连接到Windows docker桌面,docker,docker-compose,Docker,Docker Compose,我正在尝试在我的主PC上安装docker desktop,然后使用我网络上的笔记本电脑上的docker compose部署到它 我将笔记本电脑上的“DOCKER_HOST”环境变量设置为“tcp://{ipaddress}:2375” 不幸的是,我只能做到这一点,我似乎无法让docker将守护程序绑定到localhost/127.0.0.1之外的任何其他ip。如果我像这样在配置json中指定我的主机ip { "registry-mirrors": [], "

我正在尝试在我的主PC上安装docker desktop,然后使用我网络上的笔记本电脑上的docker compose部署到它

我将笔记本电脑上的“DOCKER_HOST”环境变量设置为“tcp://{ipaddress}:2375”

不幸的是,我只能做到这一点,我似乎无法让docker将守护程序绑定到localhost/127.0.0.1之外的任何其他ip。如果我像这样在配置json中指定我的主机ip

{
  "registry-mirrors": [],
  "insecure-registries": [],
  "debug": false,
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "hosts": [ "tcp://192.168.1.198:2375" ]
}
它只是拒绝启动,我也尝试了0.0.0.0作为IP绑定到所有IP地址,但无法使其工作,有时会出现以下错误

Docker.Core.HttpBadResponseException:
{"status":"error","message":"exit status 1"}

   at Docker.Core.Logging.HttpClientExceptionInterceptor.<InterceptResponseAsync>d__0.MoveNext() in C:\workspaces\stable-2.4.x\src\github.com\docker\pinata\win\src\Docker.Core\Logging\HttpClientExceptionInterceptor.cs:line 26
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Docker.Core.Logging.LoggingMessageHandler.<SendAsync>d__4.MoveNext() in C:\workspaces\stable-2.4.x\src\github.com\docker\pinata\win\src\Docker.Core\Logging\LoggingMessageHandler.cs:line 36
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Net.Http.HttpClient.<FinishSendAsyncBuffered>d__58.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.Core.HttpClientExtensions.<GetJsonAsync>d__0`1.MoveNext() in C:\workspaces\stable-2.4.x\src\github.com\docker\pinata\win\src\Docker.Core\HttpClientExtensions.cs:line 16
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.ApiServices.LifecycleClient.<DockerStartAsync>d__10.MoveNext() in C:\workspaces\stable-2.4.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\LifecycleClient.cs:line 122
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.LinuxkitDaemonStartup.<StartAsync>d__5.MoveNext() in C:\workspaces\stable-2.4.x\src\github.com\docker\pinata\win\src\Docker.Desktop\LinuxkitDaemonStartup.cs:line 30
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.Engines.WSL2.LinuxWSL2Engine.<DoStartAsync>d__25.MoveNext() in C:\workspaces\stable-2.4.x\src\github.com\docker\pinata\win\src\Docker.Desktop\Engines\WSL2\LinuxWSL2Engine.cs:line 160
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.ApiServices.StateMachines.TaskExtensions.<WrapAsyncInCancellationException>d__0.MoveNext() in C:\workspaces\stable-2.4.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\TaskExtensions.cs:line 29
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() in C:\workspaces\stable-2.4.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:line 67
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() in C:\workspaces\stable-2.4.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:line 92
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.ApiServices.StateMachines.EngineStateMachine.<StartAsync>d__14.MoveNext() in C:\workspaces\stable-2.4.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\EngineStateMachine.cs:line 69
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.Engines.Engines.<RestartAsync>d__28.MoveNext() in C:\workspaces\stable-2.4.x\src\github.com\docker\pinata\win\src\Docker.Desktop\Engines\Engines.cs:line 272
Docker一开始很好,但坚持以下几点

TCP    127.0.0.1:2375         0.0.0.0:0              LISTENING       4940
TCP    [::1]:2375             [::]:0                 LISTENING       4940
我还可以使用以下方法测试IP绑定:

Test-NetConnection -ComputerName localhost -Port 2375  (SUCCESS)
Test-NetConnection -ComputerName 192.168.1.198 -Port 2375 (FAILS)

我发现我需要使用netsh在LAN IP和docker管理端口之间进行路由

netsh interface portproxy add v4tov4 listenport=2375 listenaddress={lan ip address} connectport=2375 connectaddress=127.0.0.1

这对我有用。

不!停止远程访问Docker守护进程是一个主要的安全问题!不要尝试这个!(任何可以访问套接字的人都可以访问Docker拥有管理员权限的任何文件,如果可以通过网络访问,则网络上的任何人都可以在不进行任何身份验证或审核的情况下读取
用户
目录中的任何内容;在Linux上,他们可以轻松地根目录访问整个主机。)我在一个只有一台电脑的私人网络上做这件事,我的。它也被用于开发测试,而不是生产。不过,感谢这些信息,让我想知道,如果安全性这么差,他们是如何在Azure等平台上提供远程docker服务的。或者这仅仅局限于Docker for Windows?云产品中的容器往往是Kubernetes,它内置的安全功能使其更加安全(TLS传输带有加密、用户身份、限制用户操作的权限模型)。
netsh interface portproxy add v4tov4 listenport=2375 listenaddress={lan ip address} connectport=2375 connectaddress=127.0.0.1