繁体   English   中英

Docker-compose jupyterhub 问题

[英]Docker-compose jupyterhub issue

我有一个具有以下设置的 docker-compose 设置:

./
+-- .env
+-- docker-compose.yml
+-- jupyterhub/
| +-- Dockerfile
| +-- jupyter-config.py
+-- jupyterlab/
| +-- Dockerfile
+-- reverse-proxy/
+-- traefik.toml

我按照 opendreamkit.org 的方法操作并设法使系统启动并运行。 但是,当我再次运行命令 docker-compose down 和 up 时,出现以下错误:

*jupyterhub_hub | [E 2020-03-31 08:28:38.108 JupyterHub user:477] 未处理的错误启动 tester1 的服务器:服务器实例的“ip”特征必须是一个 unicode 字符串,但指定了 None 值。

我怀疑它*与我构建系统时收到的以下消息有关:

WARNING: The DOCKER_NETWORK_NAME variable is not set. Defaulting to a blank string.

但我想知道是否有人可以向我提供解决方法或解释为什么会发生此错误? 提前感谢您对此事的任何帮助(在这些电晕时期)

编辑:我的文件 docker-compose.yml

version: '3'

services:
  # Configuration for Hub+Proxy
  jupyterhub:
    build: jupyterhub                # Build the container from this folder.
    container_name: jupyterhub_hub   # The service will use this container name.
    volumes:                         # Give access to Docker socket.
      - /var/run/docker.sock:/var/run/docker.sock
    environment:                     # Env variables passed to the Hub process.
      DOCKER_JUPYTER_IMAGE: jupyterlab_img
      DOCKER_NETWORK_NAME: ${COMPOSE_PROJECT_NAME}_default
      HUB_IP: jupyterhub_hub
    labels:                          # Traefik configuration.
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:x.x.x.x"

  # Configuration for reverse proxy
  reverse-proxy:
        image: traefik
        ports:
                - "80:80"
                - "443:443"
                - "8080:8080"
        volumes:
                - ./reverse-proxy/traefik.toml:/etc/traefik/traefik.toml
                - /var/run/docker.sock:/var/run/docker.sock
                - /etc/certs:/etc/certs

  # Configuration for the single-user servers
  jupyterlab:
    build: jupyterlab
    image: jupyterlab_img
    command: echo

volumes:
  jupyterhub_data:

networks:
  jupyter:
          #  internal:

免责声明:借这个答案与盐的一个巨大的捏,因为我刚开始学习如何在Docker容器运行JupyterHub和JupyterLab。 公平地说,对所有 JupyterHub、Docker 和 Traefik 专家来说,初学者要弄清楚要使用哪些设置并不容易。

我遇到了与 OP 相同的问题,但他的解决方案(在 2020-04-06 的评论中)对我不起作用。 什么工作是在下面的条目jupyterhub_config.py

c.DockerSpawner.remove = True

这会在用户注销 JupyterHub 后删除 JupyterLab 容器。 如果让它们“徘徊”,那么如果同一用户再次登录,则会出现“启动 tester1 的服务器的未处理错误:服务器实例的 'ip' 特征必须是 unicode 字符串...” 不要问我为什么。 灵感来自this SO question

PS:我在 Ubuntu 20.04.1 主机、Traefik 版本 2.2、JupyterHub 和 -Lab 版本 1.2.2 中使用了 Docker 版本 19.03.12。

命令docker-compose down杀死当前网络。 docker-compose up -d创建具有相同名称但不同 NetworkID 的新网络。 您可以使用以下命令检查容器的 NetworkID:

docker inspect --format='{{range .NetworkSettings.Networks}}{{.NetworkID}}{{end}}' CONTAINER_ID

我想这是错误的主要原因:

Server 实例的 'ip' trait 必须是 unicode 字符串,但指定了 None 值

因为为了在docker-compose down后重新启动特定的用户容器,您可以将其与旧网络断开连接,连接到新网络:

docker network disconnect NETWORK_NAME CONTAINER_ID
docker network connect NETWORK_NAME CONTAINER_ID

最后,您可以在特定用户下登录 JupyterHub Web 界面后启动此容器,哪个容器出现此错误。

实际上,在这种情况下,您可以使用 Laryx Decidua 答案在 docker docker-compose down之后删除容器。 另一种选择是创建一个外部网络,就像在这个接受的答案中一样: https : //stackoverflow.com/a/51476836/12247535

有关线程中 docker-compose 的此行为/问题的更多信息https://github.com/docker/compose/issues/5745

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM