docker 2020-12-07

Hmm, trying to authenticate to a private registry with clj-docker-client, but didn't quite yet succeed

the api docs (https://docs.docker.com/engine/api/v1.40/#section/Authentication) mention a X-Registry-Auth header, but didn't find out how to include it in :ImageCreate operation

(defn- encode-base64
  [input]
  (.encodeToString (java.util.Base64/getEncoder) (.getBytes input)))

(def ^:private registry-auth
  (encode-base64
    (json/write-str
      {:username "_json_key",
       :password (json/write-str (edn/read-string (slurp "auth.edn"))),
       :email "any@valid.email",
       :serveraddress ""})))
 
      (d/invoke images
                {:op :ImageCreate,
                 :params {:fromImage image-name,
                          :X-Registry-Auth registry-auth}}))

there's also /auth endpoint, posting to it seems to make a login to my private registry, but the response gives an empty IdentityToken

(req/fetch {:conn (req/connect* {:uri "unix:///var/run/docker.sock"})
            :url  "/v1.40/auth"
            :method :post
            :body {:username "reader"
                   :password "bar"
                   :serveraddress "localhost:5000"}})
"{\"IdentityToken\":\"\",\"Status\":\"Login Succeeded\"}\n"

ah, I'll try that!

oh man, it worked, had used encode, instead of encodeToString, just a minute ago facepalm

thank you! 🙂