无法使用 fabric8 插件推送 docker 图像
Unable to push docker image with fabric8 plugin
我无法使用 fabric8 插件将 docker 图像推送到私有存储库(托管在 https://hub.docker.com 上)。我在 hub.docker 上创建了一个名为:manuzid/heap-dump-sample
的存储库。这是一个简单的 Spring 启动应用程序,仅在主函数中有一个循环。有趣的部分是 pom.xml 中的以下内容:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.27.2</version>
<configuration>
<registry>index.docker.io/v1</registry>
<!-- I think it's not necessary, plugin use the creds from docker config.json -->
<authConfig>
<username>user</username>
<password>pw</password>
</authConfig>
<images>
<image>
<name>manuzid/heap-dump-sample:%l</name>
<alias>${project.artifactId}</alias>
<build>
<from>greyfoxit/alpine-openjdk8</from>
<entryPoint>
<exec>
<arg>java</arg>
<arg>-jar</arg>
<arg>/opt/application/${project.artifactId}-${project.version}.jar</arg>
<arg>-XX:+HeapDumpOnOutOfMemoryError</arg>
<arg>-XX:HeapDumpPath=/dumps/oom.hprof</arg>
</exec>
</entryPoint>
<tags>
<tag>${project.version}</tag>
</tags>
<assembly>
<targetDir>/opt/application</targetDir>
<descriptorRef>artifact</descriptorRef>
</assembly>
<env>
<AB_ENABLED>jmx_exporter</AB_ENABLED>
</env>
</build>
<run>
<wait>
<log>Started HeapDumpSampleApplication</log>
<time>10000</time>
</wait>
<env>
<JAVA_OPTIONS>-Xmx64m</JAVA_OPTIONS>
</env>
<log>
<file>${project.build.directory}/heap-dump-sample.log</file>
</log>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<id>docker-build</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
<configuration>
<filter>${project.artifactId}</filter>
</configuration>
</execution>
<execution>
<id>docker-push</id>
<phase>install</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<filter>${project.artifactId}</filter>
</configuration>
</execution>
</executions>
</plugin>
我在控制台中收到以下错误:[ERROR] DOCKER> Unable to push 'manuzid/heap-dump-sample:latest' from registry 'index.docker.io/v1' : denied: requested access to the resource is denied [denied: requested access to the resource is denied ]
但指定的凭据与我用于登录网站的凭据相同 (https://hub.docker.com)。指定注册表urlindex.docker.io/v1
是用命令docker info
获取的。
对此有什么建议吗?提前致谢。
编辑:此示例可在此处找到:https://github.com/ManuZiD/heap-dump-sample
我在拉取和推送图像方面遇到了问题,通过研究我不完全记得我能够通过修改我的 Docker credentials store
来解决这个问题
注意执行docker登录将创建此文件并覆盖其内容(我建议备份!)
config.json的内容应该是这样的:
{
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.12 (windows)"
},
"auths": {
"https://hub.docker.com/v1/": {
"auth": "AUTH-TOKEN"
},
"https://index.docker.io/v1/": {
"auth": "AUTH-TOKEN"
}
},
"credsStore": "desktop",
"stackOrchestrator": "swarm"
}
AUTH-TOKEN需要包含base64{docker-user-id:docker-password}:
echo "docker-user-id:docker-password" | base64
注意这可以使用
解码
echo AUTH-TOKEN | base64 -d
警告切勿共享您的 config.json 文件的内容!
这是我的 windows 客户端凭据,您会从 user-agent 详细信息中注意到这一点。 OSX 用户可能更喜欢使用 OSX key-chain
我无法使用 fabric8 插件将 docker 图像推送到私有存储库(托管在 https://hub.docker.com 上)。我在 hub.docker 上创建了一个名为:manuzid/heap-dump-sample
的存储库。这是一个简单的 Spring 启动应用程序,仅在主函数中有一个循环。有趣的部分是 pom.xml 中的以下内容:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.27.2</version>
<configuration>
<registry>index.docker.io/v1</registry>
<!-- I think it's not necessary, plugin use the creds from docker config.json -->
<authConfig>
<username>user</username>
<password>pw</password>
</authConfig>
<images>
<image>
<name>manuzid/heap-dump-sample:%l</name>
<alias>${project.artifactId}</alias>
<build>
<from>greyfoxit/alpine-openjdk8</from>
<entryPoint>
<exec>
<arg>java</arg>
<arg>-jar</arg>
<arg>/opt/application/${project.artifactId}-${project.version}.jar</arg>
<arg>-XX:+HeapDumpOnOutOfMemoryError</arg>
<arg>-XX:HeapDumpPath=/dumps/oom.hprof</arg>
</exec>
</entryPoint>
<tags>
<tag>${project.version}</tag>
</tags>
<assembly>
<targetDir>/opt/application</targetDir>
<descriptorRef>artifact</descriptorRef>
</assembly>
<env>
<AB_ENABLED>jmx_exporter</AB_ENABLED>
</env>
</build>
<run>
<wait>
<log>Started HeapDumpSampleApplication</log>
<time>10000</time>
</wait>
<env>
<JAVA_OPTIONS>-Xmx64m</JAVA_OPTIONS>
</env>
<log>
<file>${project.build.directory}/heap-dump-sample.log</file>
</log>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<id>docker-build</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
<configuration>
<filter>${project.artifactId}</filter>
</configuration>
</execution>
<execution>
<id>docker-push</id>
<phase>install</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<filter>${project.artifactId}</filter>
</configuration>
</execution>
</executions>
</plugin>
我在控制台中收到以下错误:[ERROR] DOCKER> Unable to push 'manuzid/heap-dump-sample:latest' from registry 'index.docker.io/v1' : denied: requested access to the resource is denied [denied: requested access to the resource is denied ]
但指定的凭据与我用于登录网站的凭据相同 (https://hub.docker.com)。指定注册表urlindex.docker.io/v1
是用命令docker info
获取的。
对此有什么建议吗?提前致谢。
编辑:此示例可在此处找到:https://github.com/ManuZiD/heap-dump-sample
我在拉取和推送图像方面遇到了问题,通过研究我不完全记得我能够通过修改我的 Docker credentials store
来解决这个问题注意执行docker登录将创建此文件并覆盖其内容(我建议备份!)
config.json的内容应该是这样的:
{
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.12 (windows)"
},
"auths": {
"https://hub.docker.com/v1/": {
"auth": "AUTH-TOKEN"
},
"https://index.docker.io/v1/": {
"auth": "AUTH-TOKEN"
}
},
"credsStore": "desktop",
"stackOrchestrator": "swarm"
}
AUTH-TOKEN需要包含base64{docker-user-id:docker-password}:
echo "docker-user-id:docker-password" | base64
注意这可以使用
解码echo AUTH-TOKEN | base64 -d
警告切勿共享您的 config.json 文件的内容!
这是我的 windows 客户端凭据,您会从 user-agent 详细信息中注意到这一点。 OSX 用户可能更喜欢使用 OSX key-chain