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