Streamlit Docker открывается не по внутреннему URL, а по локальному хосту

#docker #ubuntu #apple-m1 #streamlit

Вопрос:

Вот воспроизводимый пример

Dockerfile

 Dockerfile
FROM python:3.8
WORKDIR /app
RUN pip install streamlit
ENTRYPOINT ["streamlit", "run", "app.py"]
 

Используемые команды Docker

 docker build -t streamlit-app:latest .
docker run -ti streamlit-app:latest
 

Как ни странно, он работает с использованием сетевого порта, предоставляемого Streamlit (в Docker, установленном в моей системе с Ubuntu), но я должен использовать localhost: 8501 в моей системе с M1 mac.

Имеет ли это какое-то отношение к проблеме?

Комментарии:

1. Просто для записи, это невозможно воспроизвести, поскольку у нас нет файлов, которые копируются в контейнер COPY . /app .

2. В вашей docker run команде нет -p опции. Если приложение сообщает, что оно прослушивает или доступно по какому-то адресу, который вы не распознаете ( 172.17.0.2:8501 ?), Это внутренний адрес Docker, который будет работать в собственном Linux с того же хоста, но не где-либо еще. Использование -p опции и localhost (или DNS-имени содержащей системы) является обычной практикой.

3. @HansKilian Спасибо за предупреждение, удалил COPY . /app , поскольку дополнительных файлов не было.

4. @DavidMaze Когда тот же процесс выполняется в Linux (Ubuntu), указанный приложением адрес (также называемый streamlit сетевым URL-адресом) доступен для браузера. Но в моей системе Mac этого не происходит.

5. Этот адрес можно использовать только в системах с собственным Linux, и то только тогда, когда вы находитесь на том же физическом хосте. Использование docker run -p опубликованных портов работает на всех операционных системах хоста. Также см. «IP-адресация для каждого контейнера невозможна» в документации Docker Desktop для Mac .