当容器停止时,容器创建的docker卷会发生什么

时间:2018-01-16 13:22:14

标签: docker docker-volume

这是我的Spring Boot应用程序的Dockerfile

public class PackVolumeConverter : IValueConverter
{   
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var package = value as packs;
        decimal volume = 0;
        if(package != null)
        {
            volume = (package.length ?? default(decimal)) *
                     (package.width ?? default(decimal)) * 
                     (package.depth ?? default(decimal)) / 1000000000;

                return volume;
        }
        return 0;
    }

    public object ConvertBack(object value, Type TargetTypes, object parameter, CultureInfo culture)
    {
        return value;
    }
}

启动容器时会创建一个卷FROM openjdk:8u151-jdk-alpine VOLUME /tmp ADD target/classes/application.properties /workdir/application.properties ADD target/foo-app-2.0.0.jar /workdir/app.jar WORKDIR /workdir ENV JAVA_OPTS="" EXPOSE 8080 ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar" ] ,该容器存储在主机的/tmp文件夹中。

当容器停止时是否删除了该卷,即清除了该卷的主机的所有内容?如果不是我如何配置?

2 个答案:

答案 0 :(得分:2)

不,卷不会自动删除(即使容器被删除),您可以使用docker volume ls命令列出它们。

这可能导致主机中存在可能大量的悬空卷(与任何容器无关的卷)。要删除它们,您可以使用此命令,例如:

docker volume rm `docker volume ls -q -f dangling=true`

(从这里https://coderwall.com/p/hdsfpq/docker-remove-all-dangling-volumes

答案 1 :(得分:2)

添加到@ Whites11回答 -

  

不,卷不会自动删除/ by_default(即使容器得到了   删除),您可以使用docker volume ls命令列出它们。

但是,一旦您的容器停止,您可以使用rm -v删除与其关联的卷:

$ docker stop $CONTAINER_ID && docker rm -v $CONTAINER_ID

手动 -

  

用法:docker rm [OPTIONS] CONTAINER [CONTAINER ...]

     

删除一个或多个容器

     

选项:

     

-f, - force强制删除正在运行的容器   (使用SIGKILL)

     

-l, - link删除指定的链接
  -v, - volume删除与之关联的卷   容器