1

Windows Server 2016 host, running Docker EE through the default MSFTdocker provider.도커 창 컨테이너 파일 액세스 권한 문제

Docker version 17.06.2-ee-5, build 508bb92

docker-compose version 1.17.1, build 6d101fb0

나는 microsoft/windowsservercore:latest을 기반으로하는 Windows 컨테이너가 있으며 Bamboo 서버의 이미지를 설정하려고합니다. 빌드 계획을 작성하는 동안 서버는 Bamboo와 Bitbucket 사이에서 통신하기위한 암호를 생성합니다. 실행중인 컨테이너에서 암호 폴더/파일 생성은 다음 오류와 함께 실패 : 나는 볼륨 C:\bamboo-home 내 Windows 호스트에 연결된 모두 시도하고, 완전히 용기 내부에 포함 된 한

java.nio.file.AccessDeniedException: C:\bamboo-home\xml-data\configuration\cipher\cipher.key_0 

. 두 번 같은 오류.

Windows 컨테이너는 'containeradministrator'라는 admininstrator 계정으로 실행됩니다. 이는 아래에 설명 된 것처럼 기본 이미지와 엔트리 포인트를 모두 사용하는 경우에 해당합니다.

표준 이미지 실행 :

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 

이 사용자는 내가 말할 수있는 것과 관리자에 대한 별칭은 다음과 같습니다

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 

그리고 맞춤형 이미지는 엔트리 포인트를 테스트 흥미롭게도이 이름으로 net user에 나타나지 않지만

,831,

그래서이 잠재적 문제이지만,에 관계없이, 사용자는 내가 말할 수있는 것과 전체 관리자 권한이 있습니다

  1. :

    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 
    

    그래서 나는 다음을 시도했다가 "Everyone - Full Access"로 폴더 사용 권한을 설정하는 컨테이너에서 빌드 단계를 실행하십시오.

  2. 사용 권한을 암호 파일을 생성하기 전에, 실행, 수동으로 같은

때마다 할 수있는 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라는 관리자)이 소유권을 가지고 있음을 나타낼 때이 디렉토리에 대한 액세스 권한을 잃는 이유는 무엇입니까? 그리고 두 경우 모두 "Everyone"이 완전한 액세스 권한을 가져야하므로 처음부터 파일 (또는 폴더)을 만들 수없는 이유는 무엇입니까?

  • +0

    Microsoft 라이브러리 외에는 문제가 재현 될 수 있습니까? 당신은'generation' 프로세스와 그 이후의 파일 시스템으로의 변경을 계속 이야기합니다. 이것은 외부 프로세스이며, 컨테이너 런타임 대신에이 동작에 대해 curlpit임을 나타냅니다. –

    +0

    안녕하세요 그렉, 확실히 동의하지 마십시오. 문제는 외부 프로세스가이 폴더에 대한 액세스 권한 ("모든 사람"의 일부로)이 읽고 쓸 수 있어야하며 쓰기가 의도 한대로 작동하지 않는 것 같습니다. 마이크로 소프트 라이브러리를 통해서만 이것을 재현 할 수있는 좋은 방법이 있다는 것을 나는 모른다. – jski

    +0

    이 프로세스는 사용 권한을 수정하고 있습니까? 정확히 무엇을 묻고 있습니까? –

    답변

    0

    호스트/컨테이너 권한 사이의 문제를 식별하지 못했지만 컨테이너를 가져온 방법으로 문제가 발생했습니다.설정 과정을 변경하면이 문제를 해결할 수있었습니다. (생성 된 폴더에 대한 사용 권한을 실패)

    초기 생성 :

    1. 는 호스트 시스템에 빈 폴더를 만듭니다.
    2. 컨테이너 내부 폴더 (이 경우 모든 C : \ bamboo-home)로 작성하여 볼륨으로 링크하십시오. 이 폴더는 Bamboo가 모든 설정/작업 공간에 넣을 폴더입니다.
    3. 컨테이너 내에 제품을 설치하면 암호 폴더가 실패한 경우를 제외하고는 모두 작동합니다. 이 단계까지는 문제를 알지 못했습니다. (제대로 작동)

    새로운 창조 :

    1. 는 호스트 시스템에 빈 폴더를 만듭니다.
    2. 컨테이너 내부 폴더 (이 경우 C : \ empty)로 작성하여 볼륨으로 링크하십시오. 이것은 C : \ bamboo-home에 링크되지 않으며 필요에 따라 실행중인 컨테이너에서 내부적으로 만들어집니다.
    3. 컨테이너 안에 제품을 설치하십시오. 완료되면 컨테이너 폴더의 모든 파일을 새 빈 폴더로 복사하십시오. 이 방법을 사용하면 사용 권한이 컨테이너 내부에서 일관된 방식으로 설정되고 이전의 문제가 완화됩니다.