无法按照Docker教程构建Docker镜像

8

我在Macbook上按照这个教程,构建一个示例Docker镜像,但是当我尝试运行以下命令时:

docker build -t getting-started .

我遇到了以下错误:

[+] Building 3.2s (15/24)                                                                                                                                                                                                                                                        
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                        0.0s
 => => transferring dockerfile: 1.05kB                                                                                                                                                                                                                                      0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                                                           0.0s
 => => transferring context: 34B                                                                                                                                                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/nginx:alpine                                                                                                                                                                                                             2.7s
 => [internal] load metadata for docker.io/library/python:alpine                                                                                                                                                                                                            2.7s
 => [internal] load metadata for docker.io/library/node:12-alpine                                                                                                                                                                                                           2.7s
 => [internal] load build context                                                                                                                                                                                                                                           0.0s
 => => transferring context: 7.76kB                                                                                                                                                                                                                                         0.0s
 => [base 1/4] FROM docker.io/library/python:alpine@sha256:94cfb962c71da780c5f3d34c6e9d1e01702b8be1edd2d450c24aead4774aeefc                                                                                                                                                 0.0s
 => => resolve docker.io/library/python:alpine@sha256:94cfb962c71da780c5f3d34c6e9d1e01702b8be1edd2d450c24aead4774aeefc                                                                                                                                                      0.0s
 => CACHED [stage-5 1/3] FROM docker.io/library/nginx:alpine@sha256:686aac2769fd6e7bab67663fd38750c135b72d993d0bb0a942ab02ef647fc9c3                                                                                                                                        0.0s
 => CACHED [app-base 1/8] FROM docker.io/library/node:12-alpine@sha256:1ea5900145028957ec0e7b7e590ac677797fa8962ccec4e73188092f7bc14da5                                                                                                                                     0.0s
 => CANCELED [app-base 2/8] RUN apk add --no-cache python g++ make                                                                                                                                                                                                          0.5s
 => CACHED [base 2/4] WORKDIR /app                                                                                                                                                                                                                                          0.0s
 => CACHED [base 3/4] COPY requirements.txt .                                                                                                                                                                                                                               0.0s
 => CACHED [base 4/4] RUN pip install -r requirements.txt                                                                                                                                                                                                                   0.0s
 => CACHED [build 1/2] COPY . .                                                                                                                                                                                                                                             0.0s
 => ERROR [build 2/2] RUN mkdocs build                                                                                                                                                                                                                                      0.4s
------                                                                                                                                                                                                                                                                           
 > [build 2/2] RUN mkdocs build:
#23 0.378 Traceback (most recent call last):
#23 0.378   File "/usr/local/bin/mkdocs", line 5, in <module>
#23 0.378     from mkdocs.__main__ import cli
#23 0.378   File "/usr/local/lib/python3.10/site-packages/mkdocs/__main__.py", line 14, in <module>
#23 0.378     from mkdocs import config
#23 0.378   File "/usr/local/lib/python3.10/site-packages/mkdocs/config/__init__.py", line 2, in <module>
#23 0.378     from mkdocs.config.defaults import DEFAULT_SCHEMA
#23 0.378   File "/usr/local/lib/python3.10/site-packages/mkdocs/config/defaults.py", line 4, in <module>
#23 0.378     from mkdocs.config import config_options
#23 0.378   File "/usr/local/lib/python3.10/site-packages/mkdocs/config/config_options.py", line 5, in <module>
#23 0.378     from collections import Sequence, namedtuple
#23 0.378 ImportError: cannot import name 'Sequence' from 'collections' (/usr/local/lib/python3.10/collections/__init__.py)
------
executor failed running [/bin/sh -c mkdocs build]: exit code: 1

我使用的Dockerfile:

# syntax=docker/dockerfile:1
FROM node:12-alpine
RUN apk add --no-cache python g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]

示例应用程序来源:https://github.com/docker/getting-started/tree/master/app

我对Docker非常陌生,希望有人可以帮忙指点一下如何使其正常工作。

解决方案:

事实证明存在两个问题:

  1. 我本应该在新创建的Dockerfile所在的/app文件夹中运行docker build -t getting-started .命令。在我的测试中,我从根文件夹运行了该命令,但是出现了与@HansKilian指出的不同的Dockerfile。一旦我尝试在/app文件夹内运行该命令,就可以正常工作了。

  2. 根文件夹中的Docker文件问题是由Python版本不匹配引起的,正如答案中@atline所指出的那样。一旦我按照建议进行更改,我也可以使用该Dockerfile构建镜像。

感谢你们的帮助。


3
您展示的构建日志看起来像是来自一个 Python 应用程序(如 FROM python:alpineRUN pip install -r requirements.txt 等),但您展示的 Dockerfile 和链接的 Github 存储库是一个 Node 应用程序。 - Hans Kilian
4个回答

6
请见其Dockerfile,它使用了FROM python:alpine AS base,这意味着它使用了一个共享标签。换句话说,在该文档编写时,python:alpine可能代表python:3.9-alpine或其他版本。
但是现在,它表示为python:3.10-alpine,请参见此链接
问题出在mkdocs本身,它使用了下面的代码:
from collections import Sequence, namedtuple

但是,如果你在Python3.9环境中使用了上述导入方式,那么你会看到以下信息,它会告诉你它将从Python3.10停止工作:

$ docker run --rm -it python:3.9-alpine /bin/sh
/ # python
Python 3.9.7 (default, Aug 31 2021, 19:01:35)
[GCC 10.3.1 20210424] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from collections import Sequence
<stdin>:1: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.10 it will stop working

因此,要使指南再次对您起作用,您需要将FROM python:alpine AS base更改为:

FROM python:3.9-alpine AS base


2
或者将 mkdoc 升级到 1.2.2 也可以。 - atline
感谢@atline的帮助。我按照你的建议更新了Dockerfile,现在它可以正常工作了。关于升级mkdoc的评论,我应该在我的Mac上升级软件包还是在Dockerfile中指定呢? - Allen Qin
2
更新 requirements.txt 文件应该可以解决这个问题。 - atline
2
我也遇到了同样的问题。只需要打开requirements.txt文件,按照atline的建议将“mkdoc”更改为“1.2.2”,即可轻松解决构建问题。 - Raisin

3
我查看了最新的mkdocs和最新的版本1.3.0,但看起来要将分支版本从1.2改变到1.3有很多变化,所以我选择了最新的1.2.4版本。
我的requirements.txt从“mkdocs==1.2.2”更改为“mkdocs==1.2.4”,并且我没有修改Dockerfile。

1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community
这个回答似乎与OP的问题无关。 - ryanwebjackson
如果您有新的问题,请单击提问按钮进行提问。如果有必要提供上下文,请包含此问题的链接。-【来自审核】 - ryanwebjackson

1

1

我把 requirements.txt 从 mkdocs 1.2.3 修改到了 mkdocs 1.2.4,现在它可以正常工作。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接