programing

도커가 도커 레지스트리 서버에 이미 로그인되어 있는지 확인하는 방법

minimums 2023. 8. 6. 09:57
반응형

도커가 도커 레지스트리 서버에 이미 로그인되어 있는지 확인하는 방법

cmd: docker 로그인을 사용하여 cmd 라인의 도커 레지스트리에 이미 로그인했는지 확실하지 않습니다.푸시를 시도하지 않고 로그인 여부를 테스트하거나 확인할 수 있는 방법은 무엇입니까?

2020년 편집

(폐쇄된) github 문제를 다시 언급하면, 그것이 지적된 곳에는 실제 세션이나 상태가 없습니다.

도커 로그인은 실제로 영구 세션을 만드는 것이 아니라 인증이 필요할 때 로그인하기 위해 사용자의 자격 증명을 읽을 수 있도록 디스크에 저장하는 것입니다.

다른 사람들이 지적했듯이,auths엔트리/노드가 에 추가됩니다.~/.docker/config.json성공적으로 로그인한 후 파일(개인 레지스트리에 대해서도 작동함)

{
    "auths": {
            "https://index.docker.io/v1/": {}
    },
    ...

로그아웃할 때 다음 항목이 제거됩니다.

$ docker logout
Removing login credentials for https://index.docker.io/v1/

도커 내용물config.json이후:

{
    "auths": {},
    ...

이 파일은 스크립트나 코드로 구문 분석하여 로그인 상태를 확인할 수 있습니다.

대체 방법(재로그인)

도커에 로그인할 수 있습니다.docker login <repository>

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If 
you don't have a Docker ID, head over to https://hub.docker.com to 
create one.
Username:

이미 로그인한 경우 다음과 같은 프롬프트가 표시됩니다.

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If 
you don't have a Docker ID, head over to https://hub.docker.com to 
create one.
Username (myusername):        # <-- "myusername"

에 대한 원래 설명을 참조하십시오.~/.docker/config.json질문 확인: 개인 도커 레지스트리에 로그인했는지 확인하는 방법

이 검사에는 다음 두 가지 방법 중 하나를 사용합니다.

1: config.json 파일 보기:

"private.registry.com "에 로그인한 경우 다음과 같은 항목이 표시됩니다.~/.docker/config.json:

"auths": {
    "private.registry.com": {
        "auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
    }
 }

2: 도커 로그인을 다시 시도합니다.

private.registry.com 에서 이미 활성 세션이 있는지 확인하려는 경우 다시 로그인해 보십시오.

bash$ docker login private.registry.com
Username (logged-in-user):

위와 같은 출력이 나오면 다음과 같은 의미입니다.logged-in-user이미 활성 세션을 수행했습니다.private.registry.com대신 사용자 이름을 묻는 메시지가 나타나면 활성 세션이 없음을 나타냅니다.

다음 명령을 수행하여 로그인한 사용자 이름과 사용된 레지스트리를 확인할 수 있습니다.

docker system info | grep -E 'Username|Registry'

도커 크리 자격 증명 체계는 당연하게도 복잡하지 않습니다. 다음을 참조하십시오.

cat ~/.docker/config.json

{
  "auths": {
    "dockerregistry.myregistry.com": {},
    "https://index.docker.io/v1/": {}

이는 Windows에 존재합니다(사용).Get-Content ~\.docker\config.json그리고 사용자 이름이 나열된 자격 증명 도구를 탐색할 수도 있습니다... 그리고 비밀번호를 검색할 수도 있다고 생각합니다.

. "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list

{"https://index.docker.io/v1/":"kcd"}

지금까지의 답변은 그다지 유용하지 않습니다.

  • docker info더 이상 이 정보를 제공하지 않습니다.
  • docker logout자격 증명을 이미 알고 있고 쉽게 다시 확인할 수 없는 경우가 아니면 큰 불편입니다.
  • docker login은 상당히 할 수 으로 분석하기가 것 .

@noobuntu의 코멘트를 바탕으로 한 솔루션은 다음과 같습니다.풀하려는 이미지를 이미 알고 있지만 사용자가 이미 로그인했는지 확실하지 않으면 다음 작업을 수행할 수 있습니다.

try pulling target image
-> on failure:
   try logging in
   -> on failure: throw CannotLogInException
   -> on success:
      try pulling target image
      -> on failure: throw CannotPullImageException
      -> on success: (continue)
-> on success: (continue)

개인 레지스트리의 경우에는 에 아무것도 표시되지 않습니다.docker info그러나 logout 명령은 로그인했는지 여부를 알려줍니다.

 $ docker logout private.example.com
 Not logged in to private.example.com

(이렇게 하면 다시 로그인해야 합니다.)

적어도 "Docker for Windows"에서는 UI를 통해 Docker 허브에 로그인했는지 확인할 수 있습니다.Windows 알림 영역에서 도커 아이콘을 마우스 오른쪽 버튼으로 클릭합니다.

내 AWS ECR 빌드 스크립트에는 다음이 있습니다.

ECR_HOSTNAME="${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com"
TOKEN=$(jq -r '.auths["'$ECR_HOSTNAME'"]["auth"]' ~/.docker/config.json)
curl --fail --header "Authorization: Basic $TOKEN" https://$ECR_HOSTNAME/v2/

ECR 액세스가 실패하면 로그인이 수행됩니다.

aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin https://$ECR_HOSTNAME

이 작업을 수행하려면 적절한 Docker 자격 증명 저장소를 사용할 수 없습니다. 의 기본 자격 증명 ~/.docker/config.json를 가정합니다.

방금 확인한 결과, 오늘은 다음과 같습니다.

$ docker login
Authenticating with existing credentials...
Login Succeeded

참고: 이것은 도커 CE의 최신 버전인 도커 자격 증명 도우미가 홈브루와 함께 설치된 macOS에 있습니다.

간단한 것을 원한다면,true/false값, 파이프를 사용할 수 있습니다.docker.jsonjq.

is_logged_in() {
  cat ~/.docker/config.json | jq -r --arg url "${REPOSITORY_URL}" '.auths | has($url)'
}

if [[ "$(is_logged_in)" == "false" ]]; then
  # do stuff, log in
fi

다음과 같은 명령을 사용합니다.

docker info | grep 'name'

WARNING: No swap limit support
Username: <strong>jonasm2009</strong>

창에서 다음 파일을 확인하여 로그인 "인증"(auth)을 검사할 수 있습니다. [USER_HOME_DIR]도커\config.json입니다.

예: c:\USERS\YOR_USERANME.docker\config.json

윈도우즈 자격 증명의 경우 다음과 같이 표시됩니다.

{
"auths": {
    "HOST_NAME_HERE": {},
    "https://index.docker.io/v1/": {}
},
"HttpHeaders": {
    "User-Agent": "Docker-Client/18.09.0 (windows)"
},
"credsStore": "wincred",
"stackOrchestrator": "swarm"
}

("")가 secretservice를통활을 통해 credsStore의 옵션~/.docker/config.json아래와 같이:

"credsStore": "secretservice",

▁the▁in에서 을 볼 수 .config.json 대신다사을여자증쿼합니다리야해명을 증명을 .docker-credential-desktop자세한 내용은 다음 답변을 참조하십시오.

도커가 도커 레지스트리 서버에 이미 로그인되어 있는지 확인하는 방법

ACR(Azure Container Registry)에서 다음은 로그인 검사로 작동합니다.

registry="contosoregistry.azurecr.io"
curl -v --header "Authorization: Bearer $access_token" https://$registry/v2/_catalog

액세스 토큰이 만료된 경우 HTTP/401이 반환됩니다.

액세스 토큰을 가져오는 옵션은 다음과 같습니다.~/.docker/config.json또는 하나를 요청합니다.https://$registry/oauth2/token에 저장된 새로 고침 토큰 사용:echo $registry | docker-credential-desktop get.

새로 고침 토큰 및 액세스 토큰에 대한 자세한 내용은 ACR 통합 문서를 참조하십시오.

위의 많은 답변은 로그인 상태를 수동으로 확인하는 방법에 대한 것입니다.명령줄에서 이 작업을 수행하려면 아래 명령을 사용합니다.

cat ~/.docker/config.json | jq '.auths["<MY_REGISTRY_HOSTNAME>"]' -e > /dev/null &&  echo "OK" ||  echo "ERR"
  1. 로컬에 jq 명령이 있는지 확인합니다.해당 실행을 테스트하는 방법jq --version지휘권버전 출력을 얻을 수 없는 경우 여기에 있는 지침에 따라 https://stedolan.github.io/jq/download/ 을 설치합니다.

  2. <MY_REGISTRY_HOSTNAME>을 레지스트리 주소로 바꿉니다.

  3. 하면 실하면반니다됩환행다니▁returns▁when됩이 반환됩니다.OK이미 성공적으로 로그인한 경우 그렇지 않은 경우ERR

참고: 자격 증명 도우미를 사용하여 로그인한 경우(예: 컨테이너 레지스트리용 Google 클라우드 인증 도구) 대체.auths키워드를 지정합니다..credHelpers

@Christian이 지적했듯이, 먼저 작업을 시도한 후 필요한 경우에만 로그인하는 것이 좋습니다.문제는 "필요한 경우"가 강력하게 수행할 것이 분명하지 않다는 것입니다.한 가지 접근 방식은 (시행착오를 통해) 알려진 일부 문자열과 도커 작동의 stderr을 비교하는 것입니다.예를들면,

try "docker OPERATION"
if it failed: 
    capture the stderr of "docker OPERATION"
    if it ends with "no basic auth credentials": 
        try docker login
    else if it ends with "not found":
        fatal error: image name/tag probably incorrect
    else if it ends with <other stuff you care to trap>:
        ...
    else:
        fatal error: unknown cause

try docker OPERATION again
if this fails: you're SOL!

powershell 파일은 powershell powershell powershell powershell 명령어입니다.$HOME/.docker/config.json다른 사람들이 언급한 것:

(Get-Content $HOME/.docker/config.json | ConvertFrom-Json).auths.PSobject.Properties.name -Contains "<registry_url>"

True/False 부울을 반환하므로 다음과 같이 사용할 수 있습니다.

if ((Get-Content $HOME/.docker/config.json | ConvertFrom-Json).auths.PSobject.Properties.name -Contains "<registry_url>" ) {
    Write-Host Already logged into docker registry
} else {
    Write-Host Logging into docker registry
    docker login
}

파일이 존재하지 않는 경우 실패하지 않으려면 추가 검사가 필요합니다.

if ( (-Not (Test-Path $HOME/.docker/config.json)) -Or (-Not (Get-Content $HOME/.docker/config.json | ConvertFrom-Json).auths.PSobject.Properties.name -Contains "<registry_url>") )
{
    Write-Host Already logged into docker registry
} else {
    Write-Host Logging into docker registry
    docker login
}

에 -Not 사기을문으로 명령을 할 때 로 인해 사용하기로 했습니다.-And-Or명령 오류가 발생합니다.

언급URL : https://stackoverflow.com/questions/36022892/how-to-know-if-docker-is-already-logged-in-to-a-docker-registry-server

반응형