cmd : docker login을 사용하여 cmd 줄의 docker 레지스트리에 이미 로그인했는지 확실하지 않습니다. 푸시하지 않고 로그인 여부를 어떻게 테스트하거나 확인할 수 있습니까?
cmd : docker login을 사용하여 cmd 줄의 docker 레지스트리에 이미 로그인했는지 확실하지 않습니다. 푸시하지 않고 로그인 여부를 어떻게 테스트하거나 확인할 수 있습니까?
답변:
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
확인하십시오 . 개인 도커 레지스트리에 로그인했는지 어떻게 알 수 있습니까?
~/.docker/config.json
.
docker info
index.docker.io 에서도 분명히 신뢰할 수 없습니다 . 현재 정상적으로 로그인되어 있으며 Registry
항목 만 표시 Username
됩니다.
이 검사를 위해 다음 두 가지 방법 중 하나를 사용합니다.
"private.registry.com"에 로그인 한 경우 다음과 같은 항목이 표시됩니다 ~/.docker/config.json
.
"auths": {
"private.registry.com": {
"auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
}
}
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'
지금까지의 답변은 그다지 유용하지 않습니다.
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 cli 자격 증명 체계는 당연히 복잡하지 않습니다.
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-credential-wincred.exe <store|get|erase|list|version>
이것은 당신이 get
당신의 암호 를 할 수 있다는 것을 의미 합니다
cat
Powershell 에서 별칭을 사용했습니다 ... 둘 다 포함하도록 업데이트되었습니다
적어도 "Docker for Windows"에서는 UI를 통해 도커 허브에 로그인했는지 확인할 수 있습니다. Windows 알림 영역에서 Docker 아이콘을 마우스 오른쪽 버튼으로 클릭하십시오.
간단한을 원하는 경우 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
jq
적절한 종료 코드를 반환 할 수 있으며 문자열 비교를 수행 할 필요가 없습니다.is_logged_in() { jq -e --arg url ${ADDRESS} '.auths | has($url)' ~/.docker/config.json > /dev/null; }; if is_logged_in; then ...
다음과 같은 명령을 사용하십시오.
docker info | grep 'name'
WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
Windows에서는 [USER_HOME_DIR] .docker \ config.json 파일을보고 로그인 "권한"(인증)을 검사 할 수 있습니다.
예 : c : \ USERS \ YOUR_USERANME.docker \ config.json
Windows 자격 증명의 경우 다음과 같이 보입니다.
{
"auths": {
"HOST_NAME_HERE": {},
"https://index.docker.io/v1/": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.0 (windows)"
},
"credsStore": "wincred",
"stackOrchestrator": "swarm"
}
@Christian이 지적했듯이 먼저 작업을 시도한 다음 필요한 경우에만 로그인하는 것이 가장 좋습니다. 문제는 "필요한 경우"가 강력하게 수행하는 것이 분명하지 않다는 것입니다. 한 가지 접근 방식은 docker 작업의 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!