Docker: 如何为 docker 推送进行身份验证?

Docker: How to authenticate for docker push?

嗨,我正在尝试 docker push

[docker-simple-httpserver]# docker push myregistry/simplehttpserver:latest
The push refers to a repository [myregistry/simplehttpserver] (len: 1)
Sending image list
FATA[0000] Error: Status 403 trying to push repository simplehttpserver: "{\"error\": \"Unauthorized updating repository images\"}" 

有没有办法让我在 docker push 命令上指定 usernamepassword

出于安全原因,我认为他们不会在命令行中设置密码。

方法是先登录再push。

https://docs.docker.com/mac/step_six/

$ docker login --username=maryatdocker --email=mary@docker.com
Password:
WARNING: login credentials saved in C:\Users\sven\.docker\config.json
Login Succeeded

然后推送

$ docker push maryatdocker/docker-whale
The push refers to a repository [maryatdocker/docker-whale] (len: 1)
7d9495d03763: Image already exists
c81071adeeb5: Image successfully pushed

据我所知你必须使用 docker login。凭据将存储在 /home/user/.docker/config.json 中以供后续 docker pushes.

如果您在自动化之后,命令 expect 对您来说会很有趣。

通常您会使用交互式 docker login 指定您的密码,然后执行 docker push.

对于非交互式登录,您可以使用 -u-p 标志:

docker login -u="${DOCKER_USERNAME}" -p="${DOCKER_PASSWORD}"

Travis CI docs for docker builds gives an example of how to automate a docker login.

有关详细信息,请参阅 docker login

如果需要登录自定义 docker 存储库,请使用以下内容:

docker login -u ${USERNAME} -p ${PASSWORD} ${DOCKER_REPOSITORY}

docker login --username=YOUR_DOCKERHUB_USERNAME

在这种情况下,您的 dockerhub 密码将是一个访问令牌。

参考:https://docs.docker.com/docker-hub/access-tokens/#create-an-access-token

如果您使用 IP 标记图像,则使用 IP 登录 docker 注册表,如果您使用域名标记图像,则使用域名登录 docker,以某种方式 docker不喜欢混合 IP 和域并失败。

不是直接回答问题,但是你可以先登录然后docker推送。

docker login -unice-username

之后它会提示输入密码。登录成功后可以docker push.

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

使用“sudo docker 登录”而不是“docker 登录”,因为一个使用根帐户,另一个使用您的个人帐户。

我个人在上传之前在 docker 的网站上创建了存储库。

接受的答案非常好!但是,如果您尝试访问私有注册表,则可能需要考虑提出以下更改请求。

docker login -u ${user_name} ${private_registry_domain} 

提供密码,当它提示相同时。