programing

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

nasanasas 2020. 10. 8. 08:06
반응형

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.iorepo 에서만 작동합니다 . 로그인은 필요할 때만 디스크에 자격 증명을 저장합니다 (예 : 실행 중 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: Docker Logged in


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

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

반응형