Docker - 超出最大深度

时间:2017-11-13 20:03:14

标签: docker docker-compose

所以我使用的是这个例子:

https://github.com/mcmoe/mssqldocker

为了创建SQL Server映像并使用数据加载它。我有几个sql脚本,我在运行容器时运行。

但是,我在构建映像时开始出现此错误:

Step 7/9 : ENTRYPOINT ./entrypoint.sh
 ---> Running in c8c654f6a630
max depth exceeded

我不知道如何解决这个问题,我重启了docker甚至更新了它。 我读了一些关于125层的东西?任何人都可以解释这个原因和潜在的解决方法吗?

我发现这个命令要运行:

docker history microsoft/mssql-server-linux:latest | wc -l
 312

我的docker-compose yml:

version: "3"
services:
  mssql:
      build: .
      image: 'microsoft/mssql-server-linux'
      ports:
          - '1433:1433'
      environment:
          - ACCEPT_EULA=Y
          - SA_PASSWORD=Abcgfgh123!
      volumes:
          - db_volume:/var/lib/mssql/data
volumes:
  db_volume:

5 个答案:

答案 0 :(得分:10)

image定义中service的{​​{1}}参数具有双重含义,具体取决于docker-compose.yml参数的存在。

  • 如果没有build节,build将被拉出并运行。

  • 如果您有image节,build将成为您构建的名称 图像被标记为,并运行。

通过命名您构建的图像image,这与microsoft/mssql-server-linux图像相同,您每次都会将构建层叠在自身之上。

原始版本开始于"官方" FROM microsoft/mssql-server-linux然后每个后续版本都会从您附加到的本地microsoft/mssql-server-linux图片开始,直到最终达到您的存储驱动程序的最大图层数。

为您构建的所有图像使用您自己的命名空间:

microsoft/mssql-server-linux

答案 1 :(得分:4)

我已经在使用自定义图片名称(如接受的答案中所述),但仍然存在此问题。

为了克服此错误,我发现我需要使用以下命令删除所有未使用的(不与任何容器相关联的)和悬挂的(制作新图像后的旧图像)docker图像:

docker image prune -a

请参见https://linuxhandbook.com/remove-docker-images/

答案 2 :(得分:2)

使用以下命令删除与dockerfile相关的所有本地docker镜像,然后重试。

$ docker rmi -f $(docker images -a -q)

答案 3 :(得分:1)

如果针对特定图像弹出此错误,则您可能需要查看所述docker图像中存在的层数。对Docker映像进行更改时,无论更改大小如何,都会将每个更改添加为一个层。我遇到过这样的场景,其中我的Docker映像具有多层并且无法推送Jenkins作业。解决方法是在Docker映像中使用相同的上下文,但减少层数。为此,您可以简单地取出图像的内容并将其移植到具有新图像名称的新图像中,这将在新图像中产生相同的内容,并且层数更少。在有帮助的情况下使用本技巧。谢谢

答案 4 :(得分:0)

对于我的情况,错误是由于 \r。我正在运行 Windows 主机,而 linux 映像需要为入口点运行一个脚本文件,该脚本文件从 Windows 复制到 docker 映像。在此过程中,脚本结束行从 \n 更改为 \r\n,从而导致此错误。撤消此操作会使错误消失。