无法按照 Docker 教程构建 docker 映像

All*_*len 8 python docker

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

docker build -t getting-started .
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[+] 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
Run Code Online (Sandbox Code Playgroud)

我使用的 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"]
Run Code Online (Sandbox Code Playgroud)

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

我对 Docker 还很陌生,如果有人能帮助指出我如何让​​它工作,我将不胜感激。

解决方案:

事实证明这里有两个问题:

  1. 我应该从新创建的 Dockerfile 所在的文件夹运行该docker build -t getting-started .命令。/app在我的测试中,我从根文件夹运行命令,其中有一个不同的 Dockerfile,正如@HansKilian 指出的那样。当我在文件夹中尝试它时/app,效果很好。

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

谢谢你们的帮助。

atl*_*ine 6

查看它的Dockerfile,它使用FROM python:alpine AS base,这意味着它使用了共享标签。在该文件撰写时,另一个词的意思python:alpine是“也许”python:3.9-alpine或“其他”。

但现在,这意味着python:3.10-alpine,看到这个

问题mkdocs本身发生,它使用下一个代码:

from collections import Sequence, namedtuple
Run Code Online (Sandbox Code Playgroud)

但是,如果您在 python3.9 环境中导入了上述内容,您将看到 next,它告诉您它将从 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
Run Code Online (Sandbox Code Playgroud)

因此,对于您来说,要使指南再次为您工作,您需要更改FROM python:alpine AS base为:

FROM python:3.9-alpine AS base

  • 或者将`mkdoc`增加到`1.2.2`也可以。 (2认同)
  • 我认为在requirements.txt中更新它。 (2认同)
  • 我遇到过同样的问题。构建它就像打开requirements.txt并将“mkdoc”更改为“1.2.2”一样简单,如atline建议的那样。 (2认同)