Windows本地构建镜像推送远程仓库

下载 Docker Desktop

https://smartidedl.blob.core.chinacloudapi.cn/docker/20210926/Docker-win.exe
使用本地docker构建镜像和推送至远程仓库(harbor)

1、开启docker的2375端口

2、配置远程仓库push镜像可以通过http

harbor.soujer.com:5000


ps:可添加data-root指定docker,镜像存储和使用的目录

3、环境变量指定成本地的2375端口

ps:无特殊情况改配置以后不需要修改

DOCKER_HOST tcp://127.0.0.1:2375

4、指定远程仓库

ps:打包时推到哪个项目仓库,通过hosts的 harbor.soujer.com 来指定即可

到此即可推送镜像到远程仓库(对应项目仓库)
ps:需确认本地可以访问对应远程仓库ip,ping或者浏览器可以打开即可
注意:需要修改程序中harbor推送目录

5、推送远程仓库

1)批处理打包方式

使用本地项目中bat文件进行打包、推送操作

@echo off
set THREAD=1C
REM 如果jdk不是1.8,就要改为自己的jdk1.8的路径
set JAVA_HOME=%JAVA_HOME%

echo mvn clean package......
start /B /WAIT cmd /c "mvn clean package -T %THREAD% -D maven.test.skip=true -P company-repo,nexus,dev -q -f pom.xml"
rem 如果cmd执行失败,则后续的命令不会执行。
if %ERRORLEVEL% neq 0 (
    echo Error: mvn clean package failed.
    exit /b %ERRORLEVEL%
)
echo mvn dockerfile:build......
start /B /WAIT cmd /c "cd ./soujer-start && mvn dockerfile:build -T %THREAD% -q -f pom.xml"
if %ERRORLEVEL% neq 0 (
    echo Error: mvn dockerfile:build failed.
    exit /b %ERRORLEVEL%
)

echo mvn dockerfile:push ......
start /B /WAIT cmd /c "cd ./soujer-start && mvn dockerfile:push -q -f pom.xml"
if %ERRORLEVEL% neq 0 (
    echo Error: mvn dockerfile:push failed.
    exit /b %ERRORLEVEL%
)

echo all operations successful!!!

exit

2)本地方式

使用PowerShell终端docker命令推送,需要docker登录harbor仓库

docker login http://harbor.soujer.com:5000
输入用户
输入密码

推送至仓库

docker push harbor.soujer.com:5000/[项目名称]/soujer-start:[tag]

【项目名称】配置harbor仓库项目,如:soujer
【tag】构建镜像时配置的tag号,或者在本地触发构建时查看

如上图,命令触发push

docker push harbor.soujer.com:5000/soujer/soujer-start:1.1.55-BASE

推送成功后可在harbor仓库查看确认是否成功即可

6、问题

出现如下问题:

unauthorized: unauthorized to access repository: soujer/soujer-start-stand, action: push: unauthorized to access repository: soujer/soujer-start-stand, action: push

先清除本地的docker登录验证
docker logout harbor.soujer.com:5000

找到本地电脑 C:\Users\用户名\.docker

删除config文件中的auths中的所有内容,然后重启docker或者关闭docker服务再开启试试(最保险的方式重启电脑)

出现这个问题

下载这个解决:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
出现下面的问题:

解决方案:
cmd/shell下执行

netsh winsock reset

然后重启docker就好了

本文作者

Soujer