首页 > 解决方案 > 无法按照 Docker 教程构建 docker 映像

问题描述

我在 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 所在docker build -t getting-started .的文件夹中运行命令。/app在我的测试中,我从根文件夹运行命令,其中有一个不同的 Dockerfile,正如@HansKilian 指出的那样。一旦我在/app文件夹中尝试过,它就可以正常工作。

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

谢谢你们的帮助。

标签: docker

解决方案


查看它的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


推荐阅读