도커가 도커 레지스트리 서버에 이미 로그인되어 있는지 확인하는 방법
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.json
jq
.
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"
로컬에 jq 명령이 있는지 확인합니다.해당 실행을 테스트하는 방법
jq --version
지휘권버전 출력을 얻을 수 없는 경우 여기에 있는 지침에 따라 https://stedolan.github.io/jq/download/ 을 설치합니다.<MY_REGISTRY_HOSTNAME>을 레지스트리 주소로 바꿉니다.
하면 실하면반니다됩환행다니▁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
'programing' 카테고리의 다른 글
MySQL - INSERT 문 안에서 문자열 값을 DATTIME 형식으로 구문 분석하는 방법은 무엇입니까? (0) | 2023.08.06 |
---|---|
Android 리소스/값에 부동 소수점 값 추가 (0) | 2023.08.06 |
상위 디렉터리에서 파일을 가져오시겠습니까? (0) | 2023.08.06 |
내용이 넘치는 Flexbox 스크롤 (0) | 2023.08.06 |
Base64를 사용하여 Base64에서 문자열을 디코딩하고 인코딩하는 방법을 아는 사람이 있습니까? (0) | 2023.08.06 |