docker使用记录一:外网载镜像,推送镜像到内网镜像仓库

一、目的:在docker中运行UI自动化(playwright)

公司是要在内网中运行,所以需要外网拉镜像,然后上传到内网镜像仓库中。

1、外网安装docker,使用docker命令拉取镜像

docker pull mcr.microsoft.com/playwright/python:v1.46.0-jammy

2、将镜像打包,传到内网

2.1 打包镜像

输入打包命令:docker save -o myimage_latest.tar mcr.microsoft.com/playwright/python:v1.46.0-jammy

2.2 找到myimage_latest.tar文件传到内网环境中

3、镜像上传到内网后,就可以将镜像上传到镜像仓库

3.1 加载镜像

docker load -i myimage_latest.tar

3.2推送镜像,先登陆,然后为镜像添加了Harbor仓库的地址和标签,然后push

docker login yourharbor.com

docker tag myimage:latest yourharbor.com/myproject/myimage:latest

docker push yourharbor.com/myproject/myimage:latest(需要有推送权限)

注:推送失败有时候可能是登陆的时候没带端口,比如yourharbor.com:82

<think>我们正在解决如何在不使用2375端口(即不开启Docker守护进程的远程非安全访问)的情况下,将镜像推送到远程Harbor仓库的问题。2375端口是Docker的未加密通信端口,存在安全风险,通常不推荐使用。替代方案是使用HTTPS(即使用TLS加密的端口,通常是2376)或者通过其他安全的方式。根据引用内容,我们可以总结出以下几点关键信息:1.在Harbor的配置中,可以通过设置`insecure-registries`来允许HTTP访问(引用[1]),但这样仍然不安全。2.更安全的做法是配置HTTPS,这需要为Harbor配置SSL证书,并在Docker客户端配置信任该证书(引用[5])。3.推送镜像时,如果使用HTTP且没有配置`insecure-registries`,或者使用HTTPS但没有正确配置证书,都会导致推送失败(引用[4])。因此,解决方案有两个方向:方向使用HTTP并配置Docker客户端信任该Harbor仓库(不安全,仅在内网测试环境中建议)方向二:使用HTTPS(推荐),并配置SSL证书。由于用户明确要求不使用2375端口,并且希望有替代方案或HTTPS设置,我们重点讲解HTTPS配置。###步骤1:为Harbor配置HTTPS根据Harbor官方文档,在安装Harbor时,需要配置SSL证书。以下是基本步骤:1.准备域名证书(可以是自签名证书或CA签发的证书)。假设我们有个自签名证书,包括`tls.crt`(证书文件)和`tls.key`(私钥文件)。2.在Harbor的配置文件`harbor.yml`中配置HTTPS:```yamlhttps:port:443#HTTPS端口,默认为443,也可以使用其他端口如8443certificate:/path/to/tls.crtprivate_key:/path/to/tls.key```同时,将`http`部分注释掉:```yaml#http:#port:80```或者,如果希望同时支持HTTP和HTTPS,可以保留HTTP配置,但通常生产环境只使用HTTPS。3.运行安装脚本(或重新配置Harbor):```bashsudo./install.sh```或者如果已经安装,可以运行:```bashsudo./preparesudodocker-composedown-vsudodocker-composeup-d```###步骤2:在Docker客户端配置信任Harbor的证书如果使用的是自签名证书,那么需要在每个Docker客户端机器上信任该证书。1.将Harbor服务器的证书(`tls.crt`)复制到Docker客户端机器上。2.在Docker客户端创建证书目录,目录结构为:`/etc/docker/certs.d/<Harbor域名>:<端口>/`。注意,这里的端口是Harbor的HTTPS端口(如443或8443)。例如,如果Harbor的域名是`core.harbor.domain`,端口是443,则目录为:```bashsudomkdir-p/etc/docker/certs.d/core.harbor.domain/```如果是自定义端口,比如8443,则目录为:```bashsudomkdir-p/etc/docker/certs.d/core.harbor.domain:8443/```3.将证书文件复制到该目录下,并重命名为`ca.crt`(或者保留原文件名,但确保是.crt后缀):```bashsudocp/path/to/tls.crt/etc/docker/certs.d/core.harbor.domain/ca.crt```如果是自定义端口:```bashsudocp/path/to/tls.crt/etc/docker/certs.d/core.harbor.domain:8443/ca.crt```4.重启Docker服务使配置生效:```bashsudosystemctlrestartdocker```###步骤3:登录和推送镜像1.使用`dockerlogin`登录到Harbor,注意使用HTTPS的URL:```bashdockerlogincore.harbor.domain```如果使用自定义端口:```bashdockerlogincore.harbor.domain:8443```2.给镜像打标签,注意镜像名前缀必须是完整的Harbor地址(包括端口,如果是443可以省略端口):```bashdockertagyour-image:tagcore.harbor.domain/your-project/your-image:tag```或者自定义端口:```bashdockertagyour-image:tagcore.harbor.domain:8443/your-project/your-image:tag```3.推送镜像:```bashdockerpushcore.harbor.domain/your-project/your-image:tag```###注意事项-如果Harbor使用HTTP,则必须在Docker客户端的`daemon.json`中配置`insecure-registries`(引用[1]),但这样通信是不加密的,不安全。-如果使用HTTPS,但证书是由受信任的CA签发的(如Let'sEncrypt),则不需要在客户端手动配置证书,因为客户端已经信任该CA。-引用[3]提到了种无需本地安装Docker推送方法,但用户问题中要求的是远程推送镜像,通常还是需要Docker客户端。如果不想在本地安装Docker,可以考虑使用HarborAPI直接上传,但这种方法较为复杂,般不常用。###总结不使用2375端口的替代方案就是使用HTTPS(通常是443端口)进行加密通信。关键步骤包括配置Harbor的HTTPS证书,以及在Docker客户端信任该证书。§§相关问题§§1.如何为Harbor生成自签名SSL证书?2.如何配置Docker客户端使用受信任的CA签发的证书访问Harbor?3.除了HTTPS,还有哪些安全的方式可以远程推送镜像到Harbor?</think>### Harbor 配置远程推送镜像(不使用 2375 端口)的解决方案 #### 1. **使用 HTTPS 安全协议(推荐方案)** **核心原理**:通过 TLS 加密替代不安全的 2375 端口,使用标准 HTTPS 端口(默认为 443 或自定义端口)。 **操作步骤**: 1. **配置 Harbor HTTPS**: - 修改 `harbor.yml` 配置文件: ```yaml https: port: 8443 # 自定义 HTTPS 端口(非 443 时需显式声明) certificate: /your/cert/path/tls.crt private_key: /your/cert/path/tls.key ``` - 生成自签名证书(示例): ```bash openssl req -x509 -newkey rsa:4096 -nodes -days 365 \ -out tls.crt -keyout tls.key \ -subj "/CN=your-harbor-domain.com" ``` 2. **Docker 客户端配置**: - 将 Harbor 证书复制到 Docker 信任目录: ```bash mkdir -p /etc/docker/certs.d/your-harbor-domain.com:8443 cp tls.crt /etc/docker/certs.d/your-harbor-domain.com:8443/ca.crt ``` - 重启 Docker 服务: ```bash systemctl restart docker ``` 3. **推送镜像**: ```bash docker tag your-image:tag your-harbor-domain.com:8443/project/your-image:tag docker push your-harbor-domain.com:8443/project/your-image:tag ``` #### 2. **HTTP 替代方案(仅限内网)** **适用场景**:测试环境且网络隔离严格时使用 HTTP。 **操作步骤**: 1. **配置 Harbor HTTP**: ```yaml http: port: 8080 # 自定义 HTTP 端口 ``` 2. **Docker 客户端设置**: - 修改 `/etc/docker/daemon.json`: ```json { "insecure-registries": ["your-harbor-ip:8080"] } ``` - 重启 Docker: ```bash systemctl restart docker ``` 3. **推送镜像**: ```bash docker push your-harbor-ip:8080/project/your-image:tag ``` #### 关键注意事项 1. **端口致性**: - Harbor 服务端口必须与推送命令中的端口完全匹配(如 `:80`、`:443`、`:8443`)[^4]。 - 错误示例:`docker push 192.168.1.10/library/image`(缺失端口)会导致失败。 2. **证书信任**: - HTTPS 方案必须确保客户端信任 Harbor 证书(自签名证书需手动分发)[^5]。 3. **网络连通性**: - 防火墙需放行自定义端口(如 8443)的 TCP 流量。 #### 方案对比 | **方案** | 安全性 | 配置复杂度 | 适用场景 | |----------------|--------|------------|------------------| | **HTTPS+证书** | ★★★★★ | ★★★☆☆ | 生产环境/跨网络 | | **HTTP+白名单**| ★★☆☆☆ | ★★☆☆☆ | 隔离内网测试环境 | > **推荐实践**:生产环境务必使用 HTTPS 方案,避免因未加密通信导致的数据泄露风险[^1][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值