8

我正在尝试构建一个提供静态 html 的简单 docker 容器。我有以下 Dockerfile:

FROM    ubuntu

# Install python3
RUN     apt-get update
RUN     apt-get install -y python3

# Copy html
ADD static/ /src
RUN cd /src

# Run http server on port 8080
EXPOSE  8080
CMD ["python3", "-m http.server 8080"

但是,当我构建 + 运行它时,我收到以下错误:

/usr/bin/python3: No module named  http

我已经通过交互式 shell 尝试了相同的步骤,它们工作正常,但是一旦我使用 Dockerfile,它就会失败。

4

2 回答 2

13

我认为您的 CMD 语法是错误的。我刚试过,效果很好:

FROM    ubuntu

# Install python3
RUN     apt-get update
RUN     apt-get install -y python3

# Copy html
ADD static/ /src
RUN cd /src

# Run http server on port 8080
EXPOSE  8080
CMD ["python3", "-m", "http.server", "8080"]
于 2013-09-12T17:46:32.973 回答
2

我遇到了一个接受答案的问题,网络问题阻止我在公司网络上运行 apt-get update ..

但是,以下 Dockerfile 可以工作,我相信它比 ubuntu 映像更轻量级,例如共享静态 html 文件这样简单。

FROM python:3.6.0-alpine
ADD static/ /src
WORKDIR /src
EXPOSE  8080
ENTRYPOINT ["python3", "-m", "http.server", "8080"]

此外,由于它与原始问题有关,以下内容是否也有效?我不确定我是否理解将命令分解为数组的好处。

CMD python3 -m http.server 8080
于 2017-01-31T21:47:50.557 回答