[英]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.