Не могу получить доступ к ноутбуку Jupyter внутри контейнера docker - PullRequest
0 голосов
/ 22 апреля 2020

Я знаю, что есть много вопросов людей, которые борются с этим, но, пожалуйста, прочитайте весь пост.
Так что я просто хочу создать dockerfile, который открывает порт 8888 для доступа к блокноту 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 intelligait3d . (create the image)
docker run -t -d --publish=8888:8888 --name ig intelligait3d (start a container based on the image)

Все до этого момента работает без любые проблемы, но теперь приходит то, чего я не понимаю:
Это работает просто отлично. jupyter notebook --allow-root --no-browser --ip 0.0.0.0 --port 8888

Но когда я пытаюсь go до

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 ]

1 голос
/ 22 апреля 2020

EXPOSE только для документации; это не имеет никакого эффекта.

Вам необходимо добавить --publish=8888:8888 к вашему docker run, чтобы порт контейнера отображался на порт хоста.

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

NB Флаг publish не требует, чтобы host-port:container-port соответствовал

0 голосов
/ 22 апреля 2020

Сначала измените файл 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...