[AWS] 為什麼 EC2 裡執行 docker push 不需要手動登入 ECR?
今天在公司上 AWS 關於 Container 的課程,
裡面用到了 docker push,將自己製作的映象檔,
上傳到 AWS 的 ECR (Amazon Elastic Container Registry)。
不過有一點令我好奇的是,
我們在 AWS EC2 上的機器直接執行 docker push,
它就直接上傳了,並不需要登入:
[ec2-user@ip-10-0-1-174 MustacheMe]$ docker push 609346932344.dkr.ecr.us-west-2.amazonaws.com/microservices_webserver:latest The push refers to repository [609346932344.dkr.ecr.us-west-2.amazonaws.com/microservices_webserver] 5e1a6f4fe6c6: Pushed 2e5883a8c7ca: Pushed 66d8e5ee400c: Pushed 2f71b45e4e25: Pushed latest: digest: sha256:19c92218eff79db2de99b08d8530fdfe96fa359e4b7ef8cd6a2a5ca4326421bd size: 3262
我在自己的機器 (非 EC2) 上隨便找一個映象檔,
tag 成相同名稱,再執行 docker push,
就會出現 no basic auth credentials 的錯誤訊息:
testuser@localhost ~ $ docker push 609346932344.dkr.ecr.us-west-2.amazonaws.com/microservices_webserver:latest The push refers to repository [609346932344.dkr.ecr.us-west-2.amazonaws.com/microservices_webserver] e571d2d3c73c: Preparing da7b0a80a4f2: Preparing 461719022993: Preparing no basic auth credentials
當然出錯是合理的,沒有登入就能上傳,想就不太可能。
可是 EC2 裡為什麼就可以直接上傳呢?
研究了一下,似乎是 AWS 有做一個 docker 登入用的外掛。
先看一下 EC2 裡的 ~/.docker/config.json,
裡面說它用的 credential store 是 ecr-login:
[ec2-user@ip-10-0-1-174 MustacheMe]$ cat ~/.docker/config.json { "credsStore": "ecr-login" }
這個 ecr-login,代表 docker 要去執行 docker-credential-ecr-login 這個程式,
來取得登入所需的資訊。
在 EC2 裡也確實有這個程式:
[ec2-user@ip-10-0-1-174 MustacheMe]$ docker-credential-ecr-login Usage: docker-credential-ecr-login <store|get|erase|list|version>
這隻程式的細節可以再參考 GitHub – awslabs/amazon-ecr-credential-helper,
應該就是會去取得 AWS 登入資訊,直接登入 ECR,
所以 docker push 就不需要再提示登入囉~
(本頁面已被瀏覽過 420 次)