Хост Windows Server 2016, запускающий Docker EE через поставщика MSFTdocker по умолчанию.
Версия докера 17.06.2-ee-5, сборка 508bb92
docker-compose версии 1.17.1, сборка 6d101fb0
У меня есть контейнер Windows на основе microsoft/windowsservercore:latest
, и я пытаюсь настроить образ для сервера Bamboo. Во время создания плана сборки сервер генерирует шифр для связи между Bamboo и Bitbucket. В работающем контейнере генерация папки/файла шифра завершается со следующей ошибкой:
java.nio.file.AccessDeniedException: C:\bamboo-home\xml-data\configuration\cipher\cipher.key_0
Я пробовал с томом C:\bamboo-home
, подключенным к моему хосту Windows и полностью содержащимся внутри контейнера. Оба раза одна и та же ошибка.
Контейнеры Windows запускаются с учетной записью администратора с именем «containeradministrator»; это имеет место как в образе по умолчанию, так и при использовании точки входа, как показано ниже.
Стандартный запуск изображения:
PS C:\> docker run -it microsoft/windowsservercore:latest powershell
Windows PowerShell Copyright (C) 2016 Microsoft Corporation. All
rights reserved.
PS C:\> whoami
user manager\containeradministrator
И на пользовательском образе для проверки точки входа:
PS C:\test> docker-compose build
Building testentrypoint
Step 1/2 : FROM microsoft/windowsservercore:latest
---> 2cddde20d95d
Step 2/2 : ENTRYPOINT whoami
---> Running in 7fe31f02e45f
---> 60822e1907f1
Removing intermediate container 7fe31f02e45f
Successfully built 60822e1907f1
Successfully tagged test/entrypoint:latest
PS C:\test> docker-compose up
Creating network "test_default" with the default driver
Creating test_testentrypoint_1 ...
Creating test_testentrypoint_1 ... done
Attaching to test_testentrypoint_1
testentrypoint_1 | user manager\containeradministrator
test_testentrypoint_1 exited with code 0
Насколько я могу судить, этот пользователь является псевдонимом администратора, хотя, что интересно, он не отображается в net user
как это имя:
PS C:\> net user
User accounts for \\
-------------------------------------------------------------------------------
Administrator DefaultAccount Guest
The command completed with one or more errors.
Так что это потенциально проблема, но независимо от того, что я могу сказать, у пользователя есть полные права администратора:
PS C:\> $user = [Security.Principal.WindowsIdentity]::GetCurrent()
PS C:\> $user
AuthenticationType : Negotiate
ImpersonationLevel : None
IsAuthenticated : True
IsGuest : False
IsSystem : False
IsAnonymous : False
Name : User Manager\ContainerAdministrator
Owner : S-1-5-93-2-1
User : S-1-5-93-2-1
Groups : {S-1-1-0, S-1-5-32-545, S-1-5-6, S-1-2-1...}
Token : 3052
AccessToken : Microsoft.Win32.SafeHandles.SafeAccessTokenHandle
UserClaims : {http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name: User Manager\ContainerAdministrator, http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid: S-1-5-93-2-1, http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid:
S-1-1-0, http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid: S-1-5-32-545...}
DeviceClaims : {}
Claims : {http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name: User Manager\ContainerAdministrator, http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid: S-1-5-93-2-1, http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid:
S-1-1-0, http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid: S-1-5-32-545...}
Actor :
BootstrapContext :
Label :
NameClaimType : http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
RoleClaimType : http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid
PS C:\> (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
True
Итак, я попробовал следующее:
Выполните шаг сборки в контейнере, который задает разрешения для папки «Все — полный доступ».
Запустите скрипт вручную в работающем контейнере при запуске, который делает то же самое.
Подключитесь к контейнеру во время работы и вручную запустите powershell, чтобы сделать то же самое.
Каждый раз перед попыткой сгенерировать файл шифра разрешения выглядят так:
PS C:\> Get-ACL C:\bamboo-home\xml-data\configuration\ | fl
Path : Microsoft.PowerShell.Core\FileSystem::C:\bamboo-home\xml-data\configuration\
Owner : User Manager\ContainerAdministrator
Group : User Manager\ContainerAdministrator
Access : Everyone Allow FullControl
NT AUTHORITY\SYSTEM Allow FullControl
BUILTIN\Administrators Allow FullControl
S-1-5-21-2465844383-291681238-1546083700-500 Allow FullControl
Audit :
Sddl : O:S-1-5-93-2-1G:S-1-5-93-2-1D:AI(A;OICIID;FA;;;WD)(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;S-1-5-21-2465844383-291681238-1546083700-500)
И вышеуказанная ошибка возникает после попытки генерации, и разрешения меняются на:
PS C:\> Get-ACL C:\bamboo-home\xml-data\configuration\ | fl
Path : Microsoft.PowerShell.Core\FileSystem::C:\bamboo-home\xml-data\configuration\
Owner : User Manager\ContainerAdministrator
Group : User Manager\ContainerAdministrator
Access : Everyone Allow FullControl
Audit :
Sddl : O:S-1-5-93-2-1G:S-1-5-93-2-1D:AI(A;OICI;FA;;;WD)
Почему учетная запись по умолчанию (предположительно администратор с именем containeradministrator) теряет доступ к этому каталогу, когда кажется, что он является владельцем? И почему он не может создать файл (или папку, если на то пошло) в первую очередь, поскольку в обоих случаях у всех должен быть полный доступ?
generation
и впоследствии об изменениях в файловой системе, которая является внешним процессом и, кажется, указывает на то, что это curlpit для этого поведения, а не среда выполнения контейнера. - person Gregory Suvalian   schedule 15.11.2017InheritanceFlags
для всех после смены папки, вы должны сделатьfl *
для него - person Gregory Suvalian   schedule 15.11.2017PS C:\> (Get-ACL C:\bamboo-home\xml-data\configuration\).Access
FileSystemRights : FullControl
AccessControlType : Allow
IdentityReference : Everyone
IsInherited : FalseInheritanceFlags : ContainerInherit, ObjectInherit
PropagationFlags : None
Таким образом, внутри создается новая папка/файл без каких-либо правил доступа. - person jski   schedule 15.11.2017