我正在尝试设置我的项目的pom.xml和Maven的settings.xml,以自动化生成Docker映像并将其推到我的AWS ECS私有Docker存储库的过程。
在我的pom.xml中,我添加了dockerfile-maven-plugin并将其配置如下:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<finalName>myproject/server</finalName>
<repository>137037344249.dkr.ecr.us-east-2.amazonaws.com/myproject/server</repository>
<tag>${docker.image.tag}</tag>
<serverId>ecs-docker</serverId>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<buildArgs>
<VERSION>${project.version}</VERSION>
<BUILD_NUMBER>${buildNumber}</BUILD_NUMBER>
<WAR_FILE>${project.build.finalName}.war</WAR_FILE>
</buildArgs>
</configuration>
</plugin>根据dockerfile-maven-plugin提供的使用说明,我需要添加用于ECS服务器身份验证的配置,但我不知道需要提供什么用户名/密码。我怀疑这是我的AWS登录用户/通行证。
<servers>
<server>
<id>ecs-docker</id>
<username>where_to_get_this</username>
<password>where_to_get_this</password>
</server>
</servers>此外,任何建议,自动化这个码头形象生成/推动我的回购更好的方式是欢迎的。
发布于 2019-02-09 09:44:41
要构建码头映像并使用Spotify dockerfile-maven-plugin将其推送到AWS ,您应该:
amazon-ecr-credential-helpergo get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login mv ~/go/bin/docker-credential-ecr-login ~/bin/credHelpers部分添加到Amazon的~/.docker/config.json文件:{
"credHelpers": {
"<ecr-id>.dkr.ecr.<aws-region>.amazonaws.com": "ecr-login"
},
//...
}(在Windows行中,如果存在"credsStore": "wincred",,则从该文件中删除)
~/.aws/config是否有您的区域[default]
region = <aws-region>~/.aws/credentials有你的钥匙
[ecr-push-user]
aws_access_key_id = <id>
aws_secret_access_key = <secret>(更多信息...)
dockerfile-maven-plugin添加到pom.xml中: <properties>
<docker.image.prefix>xxxxxxxxxxxx.dkr.ecr.rrrrrrr.amazonaws.com</docker.image.prefix>
<docker.image.name>${project.artifactId}</docker.image.name>
<docker.image.tag>${project.version}</docker.image.tag>
<docker.file>Dockerfile</docker.file>
</properties>
<build>
<finalName>service</finalName>
<plugins>
<!-- Docker image mastering -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.10</version>
<configuration>
<repository>${docker.image.prefix}/${docker.image.name}</repository>
<tag>${docker.image.tag}</tag>
<dockerfile>${docker.file}</dockerfile>
</configuration>
<executions>
<execution>
<id>default</id>
<phase>package</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>FROM openjdk:11-jre-slim
VOLUME /tmp
WORKDIR /service
COPY target/service.jar service.jar
ENTRYPOINT exec java -server \
-Djava.security.egd=file:/dev/./urandom \
$JAVA_OPTS \
-jar service.jarmvn package发布于 2018-04-05 13:35:30
要在ECR上登录,您必须使用AWS命令行生成一个docker登录命令,然后使用它登录您的docker守护进程。我不认为这个用例是由任何码头maven插件处理的。
在我的项目中,我所做的是在执行推送之前登录我的docker守护进程:
logstring=`aws --profile my-aws-profile ecr get-login --registry-ids my-registry-id`
`$logstring`在我的例子中,这个手动步骤是必需的,因为我们有一个AWS帐户,它使用一个硬件令牌来保护,该令牌生成一次使用代码,但这不是一个问题,因为我们只需要每天做一次(ECR登录持续12小时),在部署到ECR的日子(而不是只在本地测试的那些)。
所以解决办法是:
玩得开心!
https://stackoverflow.com/questions/47615658
复制相似问题