#python #docker
Вопрос:
Я пытаюсь создать контейнер Docker, который запускает http.сервер Python, прослушивающий порт 8000. Это мой док-файл:
FROM ubuntu:20.04 AS focal
WORKDIR /usr/src/server
COPY . .
RUN apt update amp;amp; apt-get install -y build-essential python python3 zip net-tools iptables sudo curl
CMD ["python3", "-m http.server", "8000"]
Во-первых, я успешно построил образ: docker build -t py_server .
Затем я попытался запустить изображение в качестве контейнера: docker run --rm -p 8000:8000 py_server
Но была выдана следующая ошибка:
/usr/bin/python3: Error while finding module specification for ' http.server' (ModuleNotFoundError: No module named ' http')
Не уверен, почему python3 не смог найти http
модуль, указанный с помощью CMD в файле Dockerfile. Я проверил, есть ли python3 в контейнере http.server
, непосредственно выполнив команду с помощью bash на изображении py_server, и это сработало:
$ docker run -it --rm -p 8000:8000 py_server bash
root@d3426b37cf2e:/usr/src/cs435_mp1_server# python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
Я очень смущен этим.
Ответ №1:
Я просто заметил, что перед «http.server» было пространство, из-за которого python3 не смог найти модуль.
Я отредактировал строку CMD в своем файле настройки, и теперь она работает:
CMD ["python3", "-m", "http.server", "8000"]
Все еще не совсем понимаю, почему ранее было добавлено пространство перед «http.server», хотя.
Комментарии:
1. Потому что вы включили это в одно слово оболочки. Вы получили бы тот же эффект, если бы работали
"python" "-m http.server" "8000"
в настройках Python, отличных от докера.