【发布时间】:2021-10-07 19:39:37
【问题描述】:
我有一个 Dockerfile
FROM python:3.7.12-slim-buster
FROM aaftio/face_recognition
RUN pip install redis
RUN pip3 install glob2
RUN pip install face_recognition
COPY ./worker.py /worker.py
COPY ./rediswq.py /rediswq.py
CMD python3 worker.py
我使用docker run -it {image_id} 构建映像并运行我的映像,
但我看到来自 python 应用程序的错误 - 它抱怨 f-strings 语法,因为它自 python 3.6 起受支持我解决它使用一些较旧的 python。
我调试并获得了它打印 1.19.0 的 python 版本
错误:
File "worker.py", line 14
for filename in glob.iglob(f"/root/divisions/{division_number}/" + '**/*.*', recursive=True):
^
SyntaxError: invalid syntax
我调试并执行了whereis python3,输出为
python3: /usr/bin/python3.5m-config /usr/bin/python3.5 /usr/bin/python3 /usr/bin/python3.5-config /usr/bin/python3.5m /usr/lib/python3 /usr/lib/python3.5 /etc/python3.5 /etc/python3 /usr/local/bin/python3.4m-config /usr/local/bin/python3.4m /usr/local/bin/python3.4 /usr/local/bin/python3 /usr/local/bin/python3.4-config /usr/local/lib/python3.4 /usr/local/lib/python3.5 /usr/include/python3.5 /usr/include/python3.5m /usr/share/python3
【问题讨论】:
-
实际的错误信息是什么?使用 python 3.7.12(通过 pyenv?)进行测试时,是否会遇到相同的错误?
-
不,当我在没有 Docker 的情况下运行我的 python 应用程序时,我没有收到任何错误。当我像上面那样对我的 python 应用程序进行 dockerize 并尝试运行它时,它会抱怨 f-string 语法。我调试了它,在代码的开头我放了简单的 f-string,它在那里抱怨。
-
要解决这个问题,请在 docker 映像中启动一个 shell(我不记得我脑海中的确切语法,但你应该可以用谷歌搜索它)。然后在那个 shell 中运行
python3 -v。输出是否符合您的预期?如果你在 docker shell 中执行python3 worker.py,它会给出同样的错误吗? -
@Code-Apprentice 我做了,它显示 Python 3.4.9 :/
-
@memoricab 问题在于您定义 dockerfile 并尝试创建多阶段构建的方式。您的最终 docker 容器将始终基于您在 Dockerfile 中为您使用的最后一个 docker 容器,它是使用
Python 3.4.9的aaftio/face_recognition而不是使用Python 3.7.12的python:3.7.12-slim-buster。多阶段 docker 构建的参考 - 此处
标签: python python-3.x docker dockerfile