首页 > 解决方案 > 如何仅列出位于特定私有注册表中的图像

问题描述

我在从本地服务器上设置的特定注册表获取图像列表时遇到问题,或者,我可能首先在将它们发布到该注册表时遇到问题,因为这是我的第一次冒险进入 docker 注册表,我可能只是对使用的术语感到困惑。

这里有一个老问题,看起来像我想要实现的目标,但与此同时,docker 似乎已经获得了对此的内置支持,因此这里提到的方法不再相关。

我有 2 台服务器(出于此问题的目的):

  1. rancher-server:这个服务器有一个rancher:v2.6.0运行的容器和一个registry:2容器。
  2. k8s-server:这只是一个新安装的服务器,安装了 docker 和 kubernetes 包,我希望 Rancher 服务器管理它。

k8s-server 上,我正在尝试rancher/rancher-agent:v2.6.0使用一些参数启动一个 docker 映像,这应该让它将控制权交给牧场主服务器。

这里的诀窍是,这都是在没有互联网访问的情况下工作所必需的(目前有互联网访问,但它是一个 PoC,用于需要气隙的任务)。出于这个问题的目的,我真的只是希望能够使用rancher-server上的注册表在 k8s-server 上启动 docker 容器。

目前,这是rancher-server的状态:

# docker ps --all
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES
b9a15ea00d5e        registry:2          "/entrypoint.sh /e..."   About an hour ago   Up About an hour    0.0.0.0:5000->5000/tcp                     local-registry
1b6bc6b88a8e        08c9693b4357        "entrypoint.sh 08c..."   26 hours ago        Up 2 hours          0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   goofy_minsky

# docker image ls --all (the list is big, this is just a sample):
REPOSITORY                                            TAG    IMAGE ID     CREATED
rancher/rancher-agent                                 v2.6.0 9c35a790aa16 2 weeks ago        
rancher-server.example.com:5000/rancher/rancher-agent v2.6.0 9c35a790aa16 2 weeks ago 

# docker info
Containers: 2
 Running: 2
 Paused: 0
 Stopped: 0
Images: 225
Server Version: 1.13.1
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: journald
Cgroup Driver: systemd
Plugins: 
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: docker-runc runc
Default Runtime: docker-runc
Init Binary: /usr/libexec/docker/docker-init-current
containerd version:  (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
runc version: 66aedde759f33c190954815fb765eedc1d782dd9 (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f)
init version: fec3683b971d9c3ef73f284f176672c44b448662 (expected: 949e6facb77383876aeff8a6944dde66b3089574)
Security Options:
 seccomp
  WARNING: You're not using the default seccomp profile
  Profile: /etc/docker/seccomp.json
 selinux
Kernel Version: 3.10.0-1160.41.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 3
CPUs: 2
Total Memory: 3.701 GiB
Name: rancher-server
ID: SA2T:G2IA:CGER:6BC5:HIV2:4T6T:LF3Q:2YVS:SYU7:SQ5V:ACUS:BMEX
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 rancher-server.example.com:5000
 127.0.0.0/8
Live Restore Enabled: false
Registries: docker.io (secure)

k8s-server 上,我尝试列出该注册表的内容:

# docker image ls --all rancher-server.example.com:5000
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.13.1
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: journald
Cgroup Driver: systemd
Plugins: 
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: docker-runc runc
Default Runtime: docker-runc
Init Binary: /usr/libexec/docker/docker-init-current
containerd version:  (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
runc version: 66aedde759f33c190954815fb765eedc1d782dd9 (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f)
init version: fec3683b971d9c3ef73f284f176672c44b448662 (expected: 949e6facb77383876aeff8a6944dde66b3089574)
Security Options:
 seccomp
  WARNING: You're not using the default seccomp profile
  Profile: /etc/docker/seccomp.json
 selinux
Kernel Version: 3.10.0-1160.41.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 3
CPUs: 2
Total Memory: 3.701 GiB
Name: k8s-server
ID: QETJ:QSPQ:VS36:OOOA:ZPYL:CDHK:AJ5G:N4BD:ZQUH:UL6O:PHAB:5UOE
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 rancher-server.example.com:5000
 127.0.0.0/8
Live Restore Enabled: false
Registries: docker.io (secure)

例如,我必须跳过一些障碍才能到达那里,首先,在 k8s-server 上的 /etc/docker/daemon.json 中将注册表标记为不安全,并在rancher-server禁用 selinux 。

我已经尝试过docker login rancher-server.example.com:5000,但这并没有什么不同。在我看来,k8s-server配置正确,但是 rancher-server 上的图像没有被正确标记/推送,但是当我回顾注册表时,我不知道如何以不同的方式做,而且,据我了解注册表,它看起来不错吗?

我已经更改了匿名的服务器名称,并且对输出进行了轻微编辑以进行演示。

编辑

我想我找到了这里发生的事情的线索,事实证明我实际上可以远程运行这个注册表中的图像,很好,只是碰巧我无法发现图像的名称,但是,如果我做一个docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher-server.example.com:5000/rancher/rancher-agent:v2.6.0 --server https://rancher-server.example.com:5000 --token <token> --ca-checksum <ca-checksum> --etcd --controlplane它实际上拉动并运行容器,所以看起来注册表本身很好,但也许索引不是?

标签: dockerdocker-registry

解决方案


推荐阅读