docker - 无法按照 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 很陌生,如果有人能帮助指出我如何使它工作,我将不胜感激。
解决方案:
原来这里有两个问题:
我应该从我新创建的 Dockerfile 所在
docker build -t getting-started .
的文件夹中运行命令。/app
在我的测试中,我从根文件夹运行命令,其中有一个不同的 Dockerfile,正如@HansKilian 指出的那样。一旦我在/app
文件夹中尝试过,它就可以正常工作。正如@atline 在答案中指出的那样,根文件夹中 Docker 文件的问题是由 Python 版本不匹配问题引起的。按照建议进行更改后,我还可以使用该 Dockerfile 构建映像。
谢谢你们的帮助。
解决方案
查看它的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
推荐阅读
- azure - 无法从同一虚拟网络中的一个 azure VM 通信到另一个 azure VM 的辅助 NIC
- ios - React-Native componentWillUnmount 未在 iOS 上调用
- angular - matdialog打开方法的Angular 7单元测试用例
- javascript - 除非明确覆盖,否则“异步”函数是否会立即返回 resolve(undefined)?
- javascript - 如何在打字稿中执行并行循环
- javascript - 我的问题是关于使用 javascript 以正确的方式将“html 代码”加载到 iframe 中
- javascript - 无法绑定到“模式”,因为它不是“mat-sidenav”的已知属性
- mysql - Model MVC Express API - 错误“connection.query 不是函数”
- amazon-web-services - Haproxy 多实例 - 服务后端不稳定 5 分钟
- mongodb - 如何在mongodb中获取其他元素以及arrayToObject?