无法访问docker容器内的jupyter笔记本

时间:2020-04-21 21:14:25

标签: python docker jupyter-notebook anaconda dockerfile

我知道很多人对此感到困惑,但请阅读全文。
因此,我只想创建一个暴露端口8888的dockerfile,以便以后访问jupyter笔记本。

这是我的dockerfile:

FROM continuumio/anaconda3
ENV DEBIAN_FRONTEND=noninteractive

ARG USERNAME=remote
ARG USER_UID=1000
ARG USER_GID=$USER_UID

COPY environment.yml* noop.txt /tmp/conda-tmp/

RUN apt-get update \
    && apt-get -y install --no-install-recommends apt-utils dialog 2>&1 \
    && apt-get -y install git openssh-client less iproute2 procps iproute2 lsb-release \
    && if [ -f "/tmp/conda-tmp/environment.yml" ]; then /opt/conda/bin/conda env update -n base -f /tmp/conda-tmp/environment.yml; else echo "did not find environment.yml"; fi \
    && rm -rf /tmp/conda-tmp \
    && groupadd --gid $USER_GID $USERNAME \
    && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
    && apt-get install -y sudo \
    && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME\
    && chmod 0440 /etc/sudoers.d/$USERNAME \
    && apt-get autoremove -y \
    && apt-get clean -y \
    && rm -rf /var/lib/apt/lists/*

ENV DEBIAN_FRONTEND=dialog

EXPOSE 8888

我运行以下命令以启动并运行容器:

docker build -t intel . (create the image)
docker run -t -d --publish=8888:8888 --name ig intel (start a container based on the image)

到目前为止,一切运行正常,但现在出现了我不明白的事情:
这样就好了。 jupyter notebook --allow-root --no-browser --ip 0.0.0.0 --port 8888

但是当我尝试去

localhost:8888?/token=(the token jupyter provides)
or
ipofthecontainer:8888?/token=(the token jupyter provides)

它什么都不做(连接超时),我也不知道为什么。

我通过以下方式检查容器的ip:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name

我验证了EXPOSE是否适用于:

docker ps

平台:windows
python版本:3.7.7
conda环境:是

我在这里没看到什么?

2 个答案:

答案 0 :(得分:1)

EXPOSE仅用于文档;它没有效果。

您需要将--publish=8888:8888添加到docker run,以便将容器的端口映射到主机端口。

docker run --tty --detach --publish=8888:8888 --name=ig intelligait3d

NB publish标志不需要host-port:container-port匹配

答案 1 :(得分:0)

首先修改您的docker文件以启动jupyter笔记本,在Dockerfile的末尾添加以下行:

CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]

然后再次构建映像,并在启动容器时使用-p选项:--publish , -p Publish a container’s port(s) to the host

docker run -t -d -p 8888:8888 --name ig intelligait3d,其中映射为-p <HOST port>:<CONTAINER port>

在这里您可以找到docker run命令的参考:https://docs.docker.com/engine/reference/commandline/run/