Fabrik8 - 仅删除一些容器

时间:2018-02-02 11:21:53

标签: spring docker spring-boot fabric8

我曾使用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>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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