我创建了两个Docker容器.第一个提供私有Docker注册表,第二个是官方Docker注册表的镜像:
docker run -d --name registry -v /local/path/to/registry:/registry -e SETTINGS_FLAVOR=local -e STORAGE_PATH=/registry -p 5000:5000 registry
docker run -d --name mirror -v /local/path/to/mirror:/registry -e STORAGE_PATH=/registry -e STANDALONE=false -e MIRROR_SOURCE=https:/registry-1.docker.io -e MIRROR_SOURCE_INDEX=https://index.docker.io -p 5555:5000 registry
Run Code Online (Sandbox Code Playgroud)
现在我想两者结合起来.每当用户提取图像时,它应首先查询私有注册表,然后查询镜像.当图像被推送时,它们应该只被推送到私人注册表.
我不知道如何做到这一点.任何帮助表示赞赏.
有没有办法在私有注册表中提取图像docker build而不是docker hub?
我部署了一个私有注册表,我希望能够避免ip:port在Dockerfile的FROM指令中命名其特定的.我期待一个docker build选项或docker环境变量来更改默认注册表.
尝试将映像推送到Docker Hub上的公用存储库时,会发生此错误.我尝试过的其他注册管理机构没有任何问题.
我查看了很多网站,包括StackOverflow在内的博客,但仍然没有明确的答案.
您可以尝试按如下方式复制此问题.
如上面的屏幕截图所示,我aspc-mvc-app在本地docker主机上有一个图像.如图所示,它有3个标签- 1.0.5,1.0.5.latest和latest.
假设我们正在尝试使用janedoeDocker Hub 的帐户名称
根据Docker.io和许多其他网站的文档,推送有3个步骤.
(1)登录
docker login "index.docker.io" -u janedoe -p <password>
Run Code Online (Sandbox Code Playgroud)
- >我觉得Login Succeeded哪个好!
(2)添加一个或多个标签
在3个标签中,让我们只标记latest.
docker tag janedoe/aspc-mvc-app:latest janedoe/aspc-mvc-app
Run Code Online (Sandbox Code Playgroud)
- >提示返回,没有错误.到现在为止还挺好.
(3)推
docker push janedoe/aspc-mvc-app
Run Code Online (Sandbox Code Playgroud)
- >这是发生错误的地方.
如下面的屏幕截图所示,初始检查似乎正常,直到您收到错误消息:拒绝请求访问资源
在步骤(2),我尝试了许多其他格式,包括以下内容.
docker tag janedoe/aspc-mvc-app:latest janedoe/aspc-mvc-app:latest
docker tag janedoe/aspc-mvc-app janedoe/aspc-mvc-app:latest
docker tag aspc-mvc-app:latest janedoe/aspc-mvc-app
docker tag aspc-mvc-app janedoe/aspc-mvc-app:latest
docker tag 306a8fd79d88 janedoe/aspc-mvc-app
docker tag 306a8fd79d88 …Run Code Online (Sandbox Code Playgroud) 我的 docker-compose 文件中有多项服务,它看起来像这样:
version: '3.7'
services:
web:
build: ./
command: gunicorn --bind 0.0.0.0:5000 --workers 2 --worker-connections 5000 --timeout 6000 manage:app
volumes:
- ./:/usr/src/app/
- static_volume:/usr/src/app/static_files
expose:
- 5000
env_file:
- ./.env.prod
depends_on:
- mongodb
mongodb:
image: mongo:4.4.1
restart: unless-stopped
command: mongod
ports:
- '27017:27017'
environment:
MONGODB_DATA_DIR: /data/db
MONDODB_LOG_DIR: /dev/null
MONGO_INITDB_ROOT_USERNAME:
MONGO_INITDB_ROOT_PASSWORD:
volumes:
- mongodbdata:/data/db
nginx:
build: ./nginx
volumes:
- static_volume:/usr/src/app/static_files
ports:
- 5001:8000
depends_on:
- web
volumes:
mongodbdata:
static_volume:
Run Code Online (Sandbox Code Playgroud)
我的 docker hub 帐户上有公共存储库,我想将我的应用程序中的所有图像推送到该存储库,任何人都可以提供帮助吗?
我们的CI-CD中有逻辑标记(通过REST)将图像分级到最新(如果测试成功).这适用于注册表v1.
现在转移到v2 api,我在文档中找不到如何在注册表中"添加"标签到现有图像..我在一个步骤,可以带来一些临时图像的"清单",但不知道如何添加标签和http发布它.试图发送以下输入
"tag":"staging","latest",
"tag":["staging","latest"]等等
{"schemaVersion":1,"name":"configservice","tag":"staging","architecture":"amd64","fsLayers":[....
在执行docker push或拉动图像时,Docker如何确定图像名称中是否存在注册服务器,或者它是默认注册表(例如Docker Hub)上的路径/用户名?
我从1.1图像规范中看到以下内容:
标签
标记用于将描述性的,用户指定的名称映射到任何单个图像ID.标签值仅限于字符集[a-zA-Z_0-9].
知识库
在公共前缀(名称组件:)之前分组的标签集合.例如,在标记为my-app:3.1.4的图像中,my-app是名称的Repository组件.存储库名称由斜杠分隔的名称组件组成,可选地以DNS主机名为前缀.主机名必须遵循标准DNS规则,但可能不包含_字符.如果存在主机名,则可以选择后跟以下格式的端口号:8080.名称组件可能包含小写字符,数字和分隔符.分隔符定义为句点,一个或两个下划线,或一个或多个破折号.名称组件不能以分隔符开头或结尾.
对于DNS主机名,是否需要使用点完全限定,或者"my-local-server"是否为有效的注册表主机名?对于名称组件,我看到句点有效,这意味着"team.user/appserver"是有效的图像名称.如果注册表服务器在端口80上运行,因此图像名称中的主机名上不需要端口号,则主机名和注册表服务器上的路径之间似乎存在歧义.我很好奇Docker如何解决这种模棱两可的问题.
您可以执行并行Docker推/拉的数量是否有限制?
例如,如果您使用Docker pull/push命令进行操作,以便它们同时拉/推不同的图像,那么并行推/拉的数量就是上限
或者
在一个终端上你做docker pull ubuntu在另一个你做docker pull httpd等 - Docker会支持什么限制?
给定一个码头工人登记在localhost:5000,我如何可以使用泊坞注册HTTP API V2和卷曲删除busybox:latest具有以下清单头和清单:
derek@derekmahar-ubuntu-512mb-tor1-01:~/Projects/docker-registry$ curl --head --request GET http://localhost:5000/v2/busybox/manifests/latest
HTTP/1.1 200 OK
Content-Length: 2561
Content-Type: application/vnd.docker.distribution.manifest.v1+prettyjws
Docker-Content-Digest: sha256:e45f25b1760f616e65f106b424f4ef29185fbd80822255d79dabc73b8eb715ad
Docker-Distribution-Api-Version: registry/2.0
Etag: "sha256:e45f25b1760f616e65f106b424f4ef29185fbd80822255d79dabc73b8eb715ad"
X-Content-Type-Options: nosniff
Date: Wed, 04 May 2016 16:10:00 GMT
derek@derekmahar-ubuntu-512mb-tor1-01:~/Projects/docker-registry$ curl --request GET http://localhost:5000/v2/busybox/manifests/latest
{
"schemaVersion": 1,
"name": "busybox",
"tag": "latest",
"architecture": "amd64",
"fsLayers": [
{
"blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
},
{
"blobSum": "sha256:385e281300cc6d88bdd155e0931fbdfbb1801c2b0265340a40481ee2b733ae66"
}
],
"history": [
{
"v1Compatibility": "{\"architecture\":\"amd64\",\"config\":{\"Hostname\":\"156e10b83429\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":null,\"Cmd\":[\"sh\"],\"Image\":\"56ed16bd6310cca65920c653a9bb22de6b235990dcaa1742ff839867aed730e5\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":{}},\"container\":\"5f8098ec29947b5bea80483cd3275008911ce87438fed628e34ec0c522665510\",\"container_config\":{\"Hostname\":\"156e10b83429\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":null,\"Cmd\":[\"/bin/sh\",\"-c\",\"#(nop) CMD [\\\"sh\\\"]\"],\"Image\":\"56ed16bd6310cca65920c653a9bb22de6b235990dcaa1742ff839867aed730e5\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":{}},\"created\":\"2016-03-18T18:22:48.810791943Z\",\"docker_version\":\"1.9.1\",\"id\":\"437595becdebaaaf3a4fc3db02c59a980f955dee825c153308c670610bb694e1\",\"os\":\"linux\",\"parent\":\"920777304d1d5e337bc59877253e946f224df5aae64c72538672eb74637b3c9e\"}"
},
{
"v1Compatibility": "{\"id\":\"920777304d1d5e337bc59877253e946f224df5aae64c72538672eb74637b3c9e\",\"created\":\"2016-03-18T18:22:48.262403239Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop) ADD …Run Code Online (Sandbox Code Playgroud) 尝试对docker push <IMAGE>私有 Docker 映像注册表执行操作时,收到错误提示清单无效
随着错误,它给出 some [DEPRECATION NOTICE],这也可能是失败的原因。
注意:在收到此错误并且docker push命令失败后。(ci/cd因为它没有完成这项工作,我猜它正在抛出exit 1),当我在注册表中查看时,图像存在。
在同一个 docker 注册表中,还有其他图像存在。他们也经历了相同的 CI/CD 管道。但对他们来说,没有检测到问题。问题是否有可能源于
Dockerfile?(虽然它以前可以工作,但使用相同的 Dockerfile)
我已经仔细检查过,我正在推送的图像version(例如<IMAGE_NAME>:0.0.1-5e90df92ed140-development:)不在注册表中。
我还提到了与此相关的多个问题和问题,并交叉检查了
fsLayers作为history注意:我们使用的是JFrog Artifactory 版本到 6.12.2
Docker 版本(在我的本地机器上,它也失败了。带有相同的消息):
Client: Docker Engine - Community
Version: 19.03.4
API version: 1.40
Go version: go1.12.10
Git commit: 9013bf5
Built: Thu Oct 17 23:44:48 2019
OS/Arch: darwin/amd64
Experimental: false …Run Code Online (Sandbox Code Playgroud) docker-registry ×10
docker ×9
dockerfile ×4
amazon-ecs ×1
aws-ecr ×1
concurrency ×1
dockerhub ×1