我正在尝试摆弄 docker 的 Microsoft 容器,当我想实际向容器发出命令时遇到问题。我已完成以下操作才能到达这里:
1.12.3-beta30.1 (8711)),以便我可以“切换到 Windows 容器”现在,当我执行docker run -it microsoft/nanoserver cmdpowershell 时,它看起来像这样:

它对服务器核心或纳米服务器执行相同的操作。它从未真正启动过命令提示符。它只是挂在这里,我无法输入任何内容。这是我的图像的更多信息:
。那么,我如何才能真正开始在容器上执行命令呢?
更新:我认为我的实际问题是我无法附加到容器。我重新开始并做了以下工作来解决这个问题:
docker run microsoft/windowsservercoredocker ps获取容器名称docker exec [container_name] cmddocker exec [container_name] ping google.com
它发出响声!嗯嗯
docker exec -it [container_name] cmd
挂起。从未启动任何提示。
docker attach [container_name]我想在我的 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 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 容器内运行的 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 似乎无法解析域机器主机名。
Windows 10和上托管Windows Server 2019。两者都有完全相同的错误。ping使用其主机名或本地 IP 从容器内部获取 SQL 实例。我的主机上安装了 Stonesoft VPN-Client 和 Docker-for-Windows。我的 Windows 容器似乎无法解析任何主机(甚至 www.google.com)。然而,我的 Linux 容器工作得很好。当我禁用网络适配器列表中的 VPN 适配器时,Windows 容器可以再次访问 Internet。但我需要它们与 VPN 一起工作。
所以我研究了一段时间并尝试遵循:
据说,主适配器应该具有最低的度量值。在我的情况下是以太网,这似乎很好。https://github.com/docker/for-win/issues/2760
我进入了 Hyper-V 管理器的虚拟交换机设置。我将名为“nat”的开关设置为“外部网络”。好吧,我的容器在那之后获得了互联网连接。但它自动禁用了 VPN 适配器,所以这是不对的。
将 vEthernet(nat) 的 IPv4 地址和 DNS 设置为自动。也没有帮助。
重新安装容器工具、Hyper-V 和 Docker。没有成功。
以下是有关我的环境的一些信息:
我的网络适配器:
我的 Docker 设置是默认设置。
Hyper-V 虚拟交换机:
vEthernet(nat) IPv4 设置:
vEthernet(DockerNAT) IPv4 设置:
vEthernet(默认交换机)IPv4 设置:
ipconfig /all 在我的主机上:
我希望这会有所帮助,有人可以回答这个问题。它已经困扰我很长一段时间了。
编辑:
由于那里没有实际问题:
我该如何解决这个问题?
我最近一直在玩 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
我需要在构建过程中重新启动 Docker 容器dotnetfx。Dockerfile:
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)
我试图同时运行这两个命令RUN并Restart-Computer在它们之间添加(分隔符\)并 …
我很好奇在 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 终止主进程。此行为可在 …
我正在使用 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
我想从 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
docker ×9
dockerfile ×3
.net-core ×2
powershell ×2
windows ×2
.net ×1
asp.net-core ×1
c# ×1
postgresql ×1
restart ×1
vpn ×1