我安装了MLRun到docker,我得到
Error invoking remote method 'docker-start-container': Error: (HTTP code 500) server error - driver failed programming external connectivity on endpoint desktopdockertools-mlrun-api-1 (a5a67db8a74bf4981d44477ffb77dccb25d2401d8fdd95c64262de30ed6d1a56): Bind for 0.0.0.0:8080 failed: port is already allocated
你有工作经验吗?我安装了不同的MLRun版本与Jupyter(使用composition .with- Jupyter .yaml)和没有Jupyter (composition .yaml),但我仍然看到同样的问题。我安装基于https://docs.mlrun.org/en/latest/install/local-docker.html#install-local-docker.
这个错误告诉你,你正在localhost
(可能是你的计算机)上运行另一个服务(应用程序),端口是8080
。
基本上你有两个选择来解决这个问题:
- 在不同端口运行
MLRun
Docker实例 - 找到并停止正在运行的应用程序,然后运行
MLRun
Docker实例
情况1的解决方案:
你必须改变Dockercompose.yaml.
文件中的设置,像这样:
services:
mlrun-api:
image: "mlrun/mlrun-api:${TAG:-1.0.6}"
ports:
- "8180:8080"
environment:
MLRUN_ARTIFACT_PATH: "${SHARED_DIR}/{{project}}"
# using local storage, meaning files / artifacts are stored locally, so we want to allow access to them
MLRUN_HTTPDB__REAL_PATH: /data
MLRUN_HTTPDB__DATA_VOLUME: "${SHARED_DIR}"
MLRUN_LOG_LEVEL: DEBUG
MLRUN_NUCLIO_DASHBOARD_URL: http://nuclio:8070
MLRUN_HTTPDB__DSN: "sqlite:////data/mlrun.db?check_same_thread=false"
MLRUN_UI__URL: http://localhost:8060
# not running on k8s meaning no need to store secrets
MLRUN_SECRET_STORES__KUBERNETES__AUTO_ADD_PROJECT_SECRETS: "false"
# let mlrun control nuclio resources
MLRUN_HTTPDB__PROJECTS__FOLLOWERS: "nuclio"
volumes:
- "${SHARED_DIR:?err}:/data"
networks:
- mlrun
mlrun-ui:
image: "mlrun/mlrun-ui:${TAG:-1.0.6}"
ports:
- "8060:8090"
environment:
MLRUN_API_PROXY_URL: http://mlrun-api:8080
MLRUN_NUCLIO_MODE: enable
MLRUN_NUCLIO_API_URL: http://nuclio:8070
MLRUN_NUCLIO_UI_URL: http://localhost:8070
networks:
- mlrun
nuclio:
image: "quay.io/nuclio/dashboard:${NUCLIO_TAG:-stable-amd64}"
ports:
- "8070:8070"
environment:
NUCLIO_DASHBOARD_EXTERNAL_IP_ADDRESSES: "${HOST_IP:-127.0.0.1}"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- mlrun
networks:
mlrun: {}
情况2的解决方案:
这种情况需要一些调查,我建议你试着用命令docker ps -a
寻找一些其他Docker容器,在那里你可以看到其他容器和它们使用的端口。如果您发现一些容器使用相同的端口8080
,您应该使用命令docker stop <container_id / container_name>; docker rm <container_id / container_name>
停止并删除它们,然后运行MLRun
container
如果您没有看到任何其他容器在端口8080
上运行,您必须使用以下命令找到服务(应用程序):
# for unix like systems
# if you are using Windows, try to find the similar one command
netstat -ltnp | grep -w ':8080'
lsof -i :8080
找到8080
端口上运行的服务进程后,可以使用kill <PROCESS_ID>
命令杀死该进程,然后再运行MLRun
container。
这是基于更多的MLRun安装而发生的,其中第一次安装分配了请求的端口8080,而其他安装失败。解决方法是:
- 从docker删除容器
- 执行新安装
如果您需要使用更多的mlrun(例如,使用jupyter和不使用jupyter),您必须更改YAML文件中的端口。