【问题标题】:Fabrik8 - Delete only some containersFabrik8 - 仅删除一些容器
【发布时间】:2018-07-12 21:25:06
【问题描述】:

我曾使用 Fabric8 的插件来编排我的图像和容器。

其中,我只需要在启动 maven(应用程序)时擦除其中一个容器;其他容器:RabbitMQ、MySQL ......我直接从集线器导入,如果它们已经有一个运行映像的容器,我不需要停止和删除它们。

现在我使用mvn clean package docker:stop docker:build docker:start 停止构建(仅应用程序)并启动所有容器,有人知道任何属性来选择哪个容器停止/删除,哪个不停止?

更新

<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.23.0</version>

    <configuration>
        <!-- <dockerHost>http://192.168.99.100:2375</dockerHost> -->
        <dockerHost>http://127.0.0.1:2375</dockerHost>

        <verbose>true</verbose>
        <images>
            <image>
                <name>${docker.image.name}</name>
                <alias>${docker.alias.name}</alias>
                <build>
                    <dockerFile>Dockerfile</dockerFile>
                    <dockerFileDir>${project.basedir}/src/test/docker/</dockerFileDir>

                    <assembly>
                        <descriptorRef>artifact</descriptorRef>
                    </assembly>

                    <tags>
                        <tag>latest</tag>
                        <tag>${project.version}</tag>
                    </tags>
                </build>
                <run>
                    <namingStrategy>alias</namingStrategy>
                    <ports>
                        <port>
                            8888:8888
                        </port>
                    </ports>
                </run>
            </image>
            <image>
                <name>rabbit-sdk</name>
                <alias>some-rabbit</alias>

                <build>
                    <assembly>
                        <descriptorRef>artifact</descriptorRef>
                    </assembly>
                    <dockerFile>DockerfileRabbit</dockerFile>
                    <dockerFileDir>${project.basedir}/src/test/docker/</dockerFileDir>
                    <tags>
                        <tag>latest</tag>
                    </tags>
                </build>
                <run>
                    <namingStrategy>alias</namingStrategy>
                    <ports>
                        <port>
                            8181:15672
                        </port>
                        <port>
                            5671:5671
                        </port>
                        <port>
                            5672:5672
                        </port>
                    </ports>
                </run>
            </image>
            <image>
                <name>redis</name>
                <alias>some-redis</alias>
                <run>
                    <namingStrategy>alias</namingStrategy>
                    <ports>
                        <port>6379:6379</port>
                    </ports>
                </run>
            </image>
        </images>
    </configuration>
</plugin>

【问题讨论】:

  • 能否提供您正在使用的maven插件配置?
  • 抱歉耽搁了我不在办公室。我把我插件的代码加给你。

标签: spring docker spring-boot fabric8


【解决方案1】:

maven 插件documentation for the docker:stop 记录了停止容器的所有可用标志。特别是,keepContainer 系统属性可能很有用:

keepContainer

If set to true not destroy container after they have been stopped. Default is false.

使用此选项时,在 pom 中定义的图像容器将在调用 docker:stop 目标时停止但不会被删除。您可以使用docker:remove 目标清理应用容器。

使用docker:remove,您可以明确指定要删除的容器。在您的情况下,应用容器:

mvn -Ddocker.filter=<app-image-name> docker:remove

因此完整的 maven 命令将是:

mvn clean package -Ddocker.keepContainer -Ddocker.filter=<app-image-name> docker:stop docker:remove docker:build docker:start

【讨论】:

  • 感谢您的回答。尝试使用该命令,但给我错误。我使用clean package -Ddocker.keepContainer -Ddocker.filter=some-server docker:stop docker:remove docker:build docker:start 执行此操作,但返回错误Conflict. The container name "/some-server" is already in use by container "058be8abfdf9ffe3ad2cd0159c00b291b1d268ceabe0cefeefa033bf78258df2". You have to remove (or rename) that container to be able to reuse that name. (Conflict: 409)。无论如何,我认为您的想法是一个好方法,我将继续使用您的参数进行调查。
【解决方案2】:

要完全删除容器,您需要将选项 keepContainer=false 传递给 docker:stop 命令。要删除特定的 docker 应用程序映像,您可以将 removeMode 属性与过滤器选项一起使用。它会是这样的:

mvn -Ddocker.filter=<image-name-for-app> docker:remove

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2019-06-08
    • 1970-01-01
    • 2018-11-11
    • 2016-08-09
    • 1970-01-01
    • 2017-04-20
    相关资源
    最近更新 更多