Docker가 이미 Docker 레지스트리 서버에 로그인되어 있는지 확인하는 방법
cmd : docker login을 사용하여 cmd 줄의 docker 레지스트리에 이미 로그인했는지 확실하지 않습니다. 푸시하지 않고 로그인 여부를 어떻게 테스트하거나 확인할 수 있습니까?
편집하다
도커에 로그인 할 수 있습니다. 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):
아래 답변은 docker info
더 이상 사용되지 않으며 더 이상 사용자 이름 정보를 표시하지 않습니다.
역사적인
로그인하면 사용자 이름과 레지스트리가 docker info
명령에 표시됩니다.
이렇게 :
[ciccio@consolecowboy.net ~]$ docker info
Containers: 12
Running: 2
..etc...
...
Username: francobolli
Registry: https://index.docker.io/v1/
편집 : 참고; 이것은 index.docker.io
repo 에서만 작동합니다 . 로그인은 필요할 때만 디스크에 자격 증명을 저장합니다 (예 : 실행 중 docker pull localhost:5000/image
또는 docker pull quay.io/username/reponame
.
이 질문 의 주석에서 지적 된 후 편집 : 개인 도커 레지스트리에 로그인했는지 어떻게 알 수 있습니까?
이 검사를 위해 다음 두 가지 방법 중 하나를 사용합니다.
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 cli 자격 증명 체계는 당연히 복잡하지 않습니다.
cat ~\.docker\config.json
{
"auths": {
"dockerregistry.myregistry.com": {},
"https://index.docker.io/v1/": {}
Windows에서는 사용자 이름도 나열하는 자격 증명 도구를 살펴볼 수도 있습니다. 그리고 암호를 검색 할 수도 있습니다.
. "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list
{"https://index.docker.io/v1/":"kcd"}
개인 레지스트리의 경우 docker info
. 그러나 logout 명령은 로그인했는지 알려줍니다.
$ docker logout private.example.com
Not logged in to private.example.com
(이렇게하면 다시 로그인해야합니다.)
방금 확인했지만 오늘은 다음과 같습니다.
$ docker login
Authenticating with existing credentials...
Login Succeeded
참고 : 이것은 최신 버전의 Docker CE, docker-credential-helper-둘 다 homebrew와 함께 설치된 macOS에 있습니다.
지금까지의 답변은 그다지 유용하지 않습니다.
docker info
더 이상이 정보를 제공하지 않음docker logout
큰 불편 함-이미 자격 증명을 알고 쉽게 다시 로그인 할 수없는 경우docker login
응답이 매우 불안정하고 프로그램에서 구문 분석하기가 쉽지 않습니다.
My solution that worked for me builds on @noobuntu's comment: I figured that if I already known the image that I want to pull, but I'm not sure if the user is already logged in, I can do this:
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)
On windows you can inspect the login "authorizations" (auths) by looking at this file: [USER_HOME_DIR].docker\config.json
Example: c:\USERS\YOUR_USERANME.docker\config.json
It will look something like this for windows credentials
{
"auths": {
"HOST_NAME_HERE": {},
"https://index.docker.io/v1/": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.0 (windows)"
},
"credsStore": "wincred",
"stackOrchestrator": "swarm"
}
You can do the following command to see the username you are logged in with and the registry used:
docker system info | grep -E 'Username|Registry'
At least in "Docker for Windows" you can see if you are logged in to docker hub over the UI. Just right click the docker icon in the windows notification area:
Use command like below:
docker info | grep 'name'
WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
As pointed out by @Christian, best to try operation first then login only if necessary. Problem is that "if necessary" is not that obvious to do robustly. One approach is to compare the stderr of the docker operation with some strings that are known (by trial and error). For example,
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!
If you want a simple true/false
value, you can pipe your docker.json
to 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
'programing' 카테고리의 다른 글
쉘 스크립트의 전역 환경 변수 (0) | 2020.10.09 |
---|---|
다시 시작해도 중단되지 않도록 Docker 컨테이너 간의 연결을 어떻게 설정합니까? (0) | 2020.10.08 |
Facebook은 OpenID 공급자입니까? (0) | 2020.10.08 |
새 커밋에 지점 지점 (0) | 2020.10.08 |
헤더 및 소스 (CPP)에 C ++ 네임 스페이스 만들기 (0) | 2020.10.08 |