标签: docker-for-windows

如何弹出docker windows容器的提示?

我正在尝试摆弄 docker 的 Microsoft 容器,当我想实际向容器发出命令时遇到问题。我已完成以下操作才能到达这里:

  1. 下载并安装Docker Desktop for Windows beta(特别是1.12.3-beta30.1 (8711)),以便我可以“切换到 Windows 容器”
  2. 重新启动我的机器
  3. 拉取了 microsoft/nanoserver 和 microsoft/windowsservercore 容器
  4. 将 docker 放入路径中
  5. 按照此处的 hyperv 步骤进行操作:Windows 10 上的 Windows 容器

现在,当我执行docker run -it microsoft/nanoserver cmdpowershell 时,它看起来像这样: 运行docker镜像

它对服务器核心或纳米服务器执行相同的操作。它从未真正启动过命令提示符。它只是挂在这里,我无法输入任何内容。这是我的图像的更多信息:docker 镜像描述选项。那么,我如何才能真正开始在容器上执行命令呢?

更新:我认为我的实际问题是我无法附加到容器。我重新开始并做了以下工作来解决这个问题:

  1. 删除所有现有容器
  2. docker run microsoft/windowsservercore
  3. 用于docker ps获取容器名称
  4. docker exec [container_name] cmd
    powershell 显示 C:! 所以在容器中执行的命令
  5. docker exec [container_name] ping google.com
    它发出响声!嗯嗯

  6. docker exec -it [container_name] cmd 挂起。从未启动任何提示。

  7. 摆脱挂起的命令
  8. 查找什么 -
    我看到它的一部分是它试图附加
  9. docker attach [container_name]
    什么都没发生。Powershell …

windows powershell docker docker-for-windows docker-desktop

5
推荐指数
1
解决办法
8243
查看次数

如何使用Dockerfile for Windows image的ARG指令

我想在我的 dockerfile 中传递一个参数来构建我的 docker 镜像。我在其他帖子和 docker 手册中看到过如何执行此操作,但在我的情况下不起作用。这是我使用参数的代码摘录:

ARG FirefoxVersion
RUN powershell -Command iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'));
RUN choco install -y firefox --version $FirefoxVersion --ignore-checksums
Run Code Online (Sandbox Code Playgroud)

我在 powershellPrompt 中使用此命令构建我的图像:

docker build -t myimage --build-arg FirefoxVersion=61.0.1 .
Run Code Online (Sandbox Code Playgroud)

最后我有这个错误:

 '$FirefoxVersion' is not a valid version string.
 Parameter name: version
 The command 'cmd /S /C choco install -y firefox --version $FirefoxVersion  -- ignore-checksums' returned a non-zero code: 1
Run Code Online (Sandbox Code Playgroud)

有人知道我的代码有什么问题吗?谢谢。

docker dockerfile docker-for-windows

5
推荐指数
2
解决办法
5767
查看次数

Windows 的 Docker '登录失败'

在运行docker build .Windows 容器时,我会定期收到以下错误。我发现唯一可以修复它的是完全重新启动系统。希望有其他方法可以解决这个问题。有任何想法吗?

CreateComputeSystem 194bb656d998902d6a1cacabc8f6213df878a70bf9644bb5726a5339b5644f1e: Logon failure: the user has not been granted the requested logon type at this computer.
(extra info: {"SystemType":"Container","Name":"194bb656d998902d6a1cacabc8f6213df878a70bf9644bb5726a5339b5644f1e","Owner":"docker","IgnoreFlushesDuringBoot":true,"LayerFolderPath":"C:\\ProgramData\\Docker\\windowsfilter\\194bb656d998902d6a1cacabc8f6213df878a70bf9644bb5726a5339b5644f1e","Layers":[{"ID":"0d961d17-3e59-57ec-b577-e2fa46e415f7","Path":"C:\\ProgramData\\Docker\\windowsfilter\\a80dd368b3b7cbd9ca1d9ee09f13abda58f99ee3eae3bb608d6c56807739b931"},{"ID":"3d9a0621-57cb-56d8-a59d-98c748f857b3","Path":"C:\\ProgramData\\Docker\\windowsfilter\\b5b087f9597cb06979e26e9fc1a4439001d72a4f9ab728e3c0fae6bb6ca1f386"},{"ID":"2928a4c9-75fe-5800-920a-c63965ccb3e3","Path":"C:\\ProgramData\\Docker\\windowsfilter\\d43421924da6b091e73c586c0635a8a12acacc34ea69a158d1050120c9b4224b"},{"ID":"b8d1ec89-66da-5527-a5f1-15717cd70b32","Path":"C:\\ProgramData\\Docker\\windowsfilter\\7c34e9529e612efe1d517ee3cbb6ca41ca98192b10bb0013aa168bd15b9df836"},{"ID":"5cf70ece-e2bd-5203-942a-75ce472653b2","Path":"C:\\ProgramData\\Docker\\windowsfilter\\e3112b599c90232a36498cd01af8208bdda3c0ae3f28a37eaaf810d75534f753"}],"HostName":"07b2112c2753","HvPartition":true,"EndpointList":["3af7ee72-3894-48ce-9259-fdc853db87da"],"HvRuntime":{"ImagePath":"C:\\ProgramData\\Docker\\windowsfilter\\e3112b599c90232a36498cd01af8208bdda3c0ae3f28a37eaaf810d75534f753\\UtilityVM"},"AllowUnqualifiedDNSQuery":true})
Run Code Online (Sandbox Code Playgroud)

windows docker docker-for-windows

5
推荐指数
1
解决办法
2763
查看次数

在 docker 容器中连接到 SQL Server 时出错

我有一个在 Windows Docker 容器内运行的 ASP.NET Core WebAPI。我在从应用程序内部连接到本地 SQL 实例时遇到问题。

这是错误消息:

(0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)---> System.ComponentModel.Win32Exception (53): 找不到网络路径

在 github 上发现了这个问题,但它并不真正适用于我的情况。

我可以通过用服务器本地 IP 地址替换实例名称来使一切正常,如下所示:

"ConnectionString_ThrowingError": "Data Source=MySqlInstance; (...)"
"ConnectionString_WorkingFine":   "Data Source=192.168.0.123; (...)"
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?.NET 似乎无法解析域机器主机名。


其他详情

  • 使用 .Net Core 2.2
  • 在 Windows 上使用 Docker Windows 容器
  • 尝试在Windows 10和上托管Windows Server 2019。两者都有完全相同的错误。
  • 我可以ping使用其主机名或本地 IP 从容器内部获取 SQL 实例。
  • 当我用连接字符串中的本地 IP 地址替换实例名称时,一切正常。
  • 如果我在 .NET CLI 中运行应用程序,一切正常(不使用 Docker)
  • 我尝试访问的 …

c# docker .net-core asp.net-core docker-for-windows

5
推荐指数
1
解决办法
5359
查看次数

Windows 容器无法访问互联网,但 Linux 容器可以 - 在主机上激活 VPN 客户端

我的主机上安装了 Stonesoft VPN-Client 和 Docker-for-Windows。我的 Windows 容器似乎无法解析任何主机(甚至 www.google.com)。然而,我的 Linux 容器工作得很好。当我禁用网络适配器列表中的 VPN 适配器时,Windows 容器可以再次访问 Internet。但我需要它们与 VPN 一起工作。

所以我研究了一段时间并尝试遵循:

  1. 在 powershell 中检查适配器优先级:Get-NetIPInterface -AddressFamily IPv4 | Sort-Object -Property InterfaceMetric -Descending

在此处输入图片说明

据说,主适配器应该具有最低的度量值。在我的情况下是以太网,这似乎很好。https://github.com/docker/for-win/issues/2760

  1. 使用 --dns=8.8.8.8 标志运行图像。没有解决问题。
  2. 我进入了 Hyper-V 管理器的虚拟交换机设置。我将名为“nat”的开关设置为“外部网络”。好吧,我的容器在那之后获得了互联网连接。但它自动禁用了 VPN 适配器,所以这是不对的。

  3. 将 vEthernet(nat) 的 IPv4 地址和 DNS 设置为自动。也没有帮助。

  4. 重新安装容器工具、Hyper-V 和 Docker。没有成功。

  5. 尝试旧版本的 Docker-for-Windows。没有成功。

以下是有关我的环境的一些信息:

我的网络适配器:

在此处输入图片说明

我的 Docker 设置是默认设置。

在此处输入图片说明

在此处输入图片说明

Hyper-V 虚拟交换机:

在此处输入图片说明

vEthernet(nat) IPv4 设置:

在此处输入图片说明

vEthernet(DockerNAT) IPv4 设置:

在此处输入图片说明

vEthernet(默认交换机)IPv4 设置:

在此处输入图片说明

ipconfig /all 在我的主机上:

在此处输入图片说明 在此处输入图片说明

我希望这会有所帮助,有人可以回答这个问题。它已经困扰我很长一段时间了。

编辑:

由于那里没有实际问题:

我该如何解决这个问题?

vpn docker docker-for-windows

5
推荐指数
1
解决办法
1151
查看次数

Windows 服务器上的 Docker 是“免费的”吗?

我最近一直在玩 docker windows 容器,我想把一些工作负载放在 Windows 服务器上。

但是当我在 Windows Server 2016 上安装 Docker Desktop 时,它没有说它只适用于 Windows 10。

深入研究表明,对于 Windows 服务器,您需要 Docker Enterprise。其中成本:“联系销售”(意思是不便宜)。(这个docker 实验室表明您可以在 Windows 10 上安装 docker 桌面,但对于 Windows 服务器,您需要 docker 企业版。)

Docker for Windows 是我可以使用开源“免费”许可证部署到生产环境的产品吗?如果是这样,那个产品在哪里,它叫什么?

windows-server docker windows-server-2016 docker-for-windows

5
推荐指数
1
解决办法
2327
查看次数

在构建过程中重启 Docker 容器

我需要在构建过程中重新启动 Docker 容器dotnetfxDockerfile

FROM mcr.microsoft.com/windows/servercore:ltsc2019

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

# Install Chocolatey
RUN Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

# Universal Windows Platform build tools workload for Visual Studio 2019 Build Tools (https://chocolatey.org/packages/visualstudio2019-workload-universalbuildtools#dependencies)
RUN choco install visualstudio2019-workload-universalbuildtools --package-parameters "--includeOptional" --confirm
Run Code Online (Sandbox Code Playgroud)

但我正面临这个错误:

Packages requiring reboot:
 - dotnetfx (exit code 3010) # <--- it means a reboot is needed!
Run Code Online (Sandbox Code Playgroud)

我试图同时运行这两个命令RUNRestart-Computer在它们之间添加(分隔符\)并 …

powershell restart docker dockerfile docker-for-windows

5
推荐指数
1
解决办法
1644
查看次数

Windows 上的 .NET Core 应用程序能否捕获 SIGTERM 事件?

我很好奇在 Windows 上运行的用 .NET Core 编写的控制台应用程序是否可以拦截 SIGKILL 事件并且基本上知道它正在被终止。这是我正在尝试的代码:

class Program
{
    static async Task Main(string[] args)
    {
        Console.WriteLine($"Hello from PID {Process.GetCurrentProcess().Id}, press CTRL+C to exit.");

        AssemblyLoadContext.GetLoadContext(Assembly.GetExecutingAssembly()).Unloading += context =>
        {
            Console.WriteLine("SIGTERM received, exiting program...");
        };

        Console.CancelKeyPress += (s, e) =>
        {
            Console.WriteLine("SIGINT received, exiting program...");
            Environment.Exit(0);
        };

        try
        {
            await Task.Delay(Timeout.Infinite);
        }
        finally
        {
            Console.WriteLine("Finally executed..");
        }

    }
Run Code Online (Sandbox Code Playgroud)

当我从命令行运行程序时,我可以使用 CTRL+C 组合键终止它。这将激活CancelKeyPress以及Unloading。如果我以其他方式终止程序(使用 Windows 任务管理器的“结束进程”功能或Stop-ProcessPowerShell 命令),该进程将简单地结束,而不会向控制台写入任何输出。

这是一个更大目标的一部分,即捕获 Docker 容器关闭。在 Windows 上,该docker stop命令将使用 SIGTERM 终止主进程。此行为可在 …

.net docker .net-core docker-for-windows

5
推荐指数
1
解决办法
2803
查看次数

使用 Docker 创建 OSM 磁贴服务器的问题

我正在使用 OpenStreetMap tile server @ https://github.com/Overv/openstreetmap-tile-server来托管我自己的 tile 服务器。

我使用以下命令运行容器并且它运行没有错误,但是当我尝试在 localhost:8080 上查看网页时,地图图块不会加载。当我查看网络选项卡时,我可以看到他们收到 404 错误:

PS C:\Development\Uni> docker run -p 8080:80 -v openstreetmap-data:/var/lib/postgres/12/main -d overv/openstreetmap-tile-server run
Run Code Online (Sandbox Code Playgroud)

我得到了一份 Docker 日志的副本,以了解那里发生了什么:

+ '[' 1 -ne 1 ']'
+ '[' run = import ']'
+ '[' run = run ']'
+ rm -rf /tmp/hsperfdata_root
+ chown postgres:postgres /var/lib/postgresql -R
+ '[' '' == enabled ']'
+ '[' '' == 1 ']'
+ createPostgresConfig
+ cp /etc/postgresql/12/main/postgresql.custom.conf.tmpl /etc/postgresql/12/main/conf.d/postgresql.custom.conf
+ sudo -u postgres echo 'autovacuum = …
Run Code Online (Sandbox Code Playgroud)

postgresql openstreetmap docker dockerfile docker-for-windows

5
推荐指数
1
解决办法
1221
查看次数

来自 Windows 主机的远程容器挂载网络共享

问题描述

我想从 devcontainer.json“mounts”属性指定一个网络共享的挂载,以便我可以编写从该网络共享中提取文件的脚本,并可以在多台主机上运行。

我可以看到 VSCode 远程容器纯粹是将“mounts”属性值传递给docker run --mount参数。所以,如果我能找到一种方法让它发挥作用,那么我应该做好准备。

我可以从 WSL2 发行版挂载网络共享sudo mount -t drvfs //myserver/projects /mnt/p并将其挂载在容器中docker run --rm -it --mount source=/mnt/p,target=/mnt/p,type=bind,readonly=true ubuntu:18.04 bash,我可以在容器中列出该目录以获取网络共享的内容。但这仅在我从 WSL2 分发终端窗口中执行 docker 命令时才有效。为了在 VSCode 远程容器中工作,我需要它在 Windows 主机上工作。而且我还没有找到任何可从标准 Windows 命令提示符运行的等效命令。

我试过的

这些都是从主机上的 Windows 命令提示符尝试的。
我有一个从P:到的映射网络驱动器\\myserver\projects

# Even with the mount to the network share still present in the primary WSL distribution
docker run --rm -it --mount source=/mnt/p,target=/mnt/p,type=bind,readonly=true ubuntu:18.04 bash
docker: Error response from daemon: invalid mount config …
Run Code Online (Sandbox Code Playgroud)

visual-studio-code windows-subsystem-for-linux docker-for-windows vscode-remote

5
推荐指数
0
解决办法
1231
查看次数