Powershell Windows Docker容器通过Dockerfile配置DNS服务器失败
我正在尝试设置一个Windows服务器容器,该容器应该像DNS服务器一样工作(稍后您可以看到Docker将其称为“目标”)。以下是我用于配置的Dockerfile:Powershell Windows Docker容器通过Dockerfile配置DNS服务器失败,powershell,docker,dns,docker-for-windows,Powershell,Docker,Dns,Docker For Windows,我正在尝试设置一个Windows服务器容器,该容器应该像DNS服务器一样工作(稍后您可以看到Docker将其称为“目标”)。以下是我用于配置的Dockerfile: FROM mcr.microsoft.com/windows/servercore:ltsc2019 SHELL ["powershell", "-Command"] RUN Set-ExecutionPolicy Unrestricted # DNS Role RUN Install-
FROM mcr.microsoft.com/windows/servercore:ltsc2019
SHELL ["powershell", "-Command"]
RUN Set-ExecutionPolicy Unrestricted
# DNS Role
RUN Install-WindowsFeature DNS -IncludeManagementTools
RUN Add-DnsServerPrimaryZone -Name "lab" -ZoneFile "lab.dns" -DynamicUpdate NonSecureAndSecure
RUN Add-DnsServerZoneDelegation -Name "lab" -ChildZoneName "abc" -NameServer "abc.lab" -IPAddress 172.16.238.11 -PassThru
RUN Add-DnsServerResourceRecordA -Name "abc" -ZoneName "lab" -AllowUpdateAny -IPv4Address "172.16.238.11" -TimeToLive 01:00:00 -CreatePtr
CMD ["powershell", "Start-Sleep", "-s", "1000"]
当我尝试使用docker compose构建容器(这不是compose文件中的唯一容器)时,构建失败并引发以下错误:
Step 6/8 : RUN Add-DnsServerZoneDelegation -Name "lab" -ChildZoneName "abc" -NameServer "abc.lab" -IPAddress 172.16.238.11 -PassThru
---> Running in d569392c87c9
Add-DnsServerZoneDelegation : Failed to create resource record abc.lab. in
zone lab on server D569392C87C9.
At line:1 char:1
+ Add-DnsServerZoneDelegation -Name lab -ChildZoneName abc -NameServer ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (abc.lab.:root/Microsoft/...rZoneD
elegation) [Add-DnsServerZoneDelegation], CimException
+ FullyQualifiedErrorId : WIN32 9703,Add-DnsServerZoneDelegation
ERROR: Service 'target' failed to build : The command 'powershell -Command Add-DnsServerZoneDelegation -Name "lab" -ChildZoneName "abc" -NameServer "abc.lab" -IPAddress 172.16.238.11 -PassThru' returned a non-zero code: 1
值得注意的是,当我在带有powershell的容器中运行这三个命令(步骤5到7)时,一切正常
由于通过Dockerfile进行配置不起作用,但通过powershell运行命令起作用,因此我决定尝试另一种方法,并将Dockerfile更改为:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
SHELL ["powershell", "-Command"]
RUN Set-ExecutionPolicy Unrestricted
# DNS Role
RUN Install-WindowsFeature DNS -IncludeManagementTools
COPY resources/ C:/resources/
WORKDIR C:/resources/
RUN .\dns-config.ps1
CMD ["powershell", "Start-Sleep", "-s", "1000"]
其中\resources\dns-config.ps1为:
Add-DnsServerPrimaryZone -Name "lab" -ZoneFile "lab.dns" -DynamicUpdate NonSecureAndSecure
Add-DnsServerZoneDelegation -Name "lab" -ChildZoneName "abc" -NameServer "abc.lab" -IPAddress 172.16.238.11 -PassThru
Add-DnsServerResourceRecordA -Name "attacker" -ZoneName "lab" -AllowUpdateAny -IPv4Address "172.16.238.11"
(同样的事情,但通过脚本)
这样,生成成功,但区域委派似乎未配置,因为当我发出Get DnsServerZoneDelegation
时,它会抛出一个错误:
PS C:\resources> Get-DnsServerZoneDelegation -Name lab
Get-DnsServerZoneDelegation : Failed to get record in lab zone on C306A607A4B0 server.
At line:1 char:1
+ Get-DnsServerZoneDelegation -Name lab
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (PS_DnsServerZoneDelegation:root/Microsoft/...rZoneDelegation) [Get-DnsS erverZoneDelegation], CimException
+ FullyQualifiedErrorId : WIN32 9714,Get-DnsServerZoneDelegation
同样,如果我只是注释掉RUN.\dns config.ps1
行,并在构建成功后在容器的powershell中运行脚本,那么一切似乎都正常工作:
PS C:\resources> .\dns-config.ps1
ZoneName ChildZoneName NameServer IPAddress
-------- ------------- ---------- ---------
lab abc.lab. abc.lab. 172.16.238.11
PS C:\resources> Get-DnsServerZoneDelegation -Name lab
ZoneName ChildZoneName NameServer IPAddress
-------- ------------- ---------- ---------
lab abc.lab. abc.lab. 172.16.238.11
那么,我做错了什么?提前感谢,我觉得应该有一个简单的解释,但在这一点上,我完全失去了诚实
可能有用的额外信息:
我正在用docker compose-build-d
与另一个容器(不抛出错误)一起构建这个容器
Docker引擎版本为v19.03.13-beta2
在Windows 10主机上运行所有这些-Windows 10版本1903(OS Build 18362.1082)相关?