簡體   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