#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 .