#python #docker #docker-compose #progress-bar #tqdm
Вопрос:
Из контейнера Docker кажется, что tqdm
у него возникли некоторые проблемы с отображением при запуске в собственном потоке.
Я пробовал другие индикаторы выполнения (например alive-progress
), но все они не работают. Тот же код безупречно работает, когда выполняется за пределами контейнера. Это похоже на проблему, связанную с Докером, скорее docker-compose
всего, одну, но я не могу определить проблему. Есть какие-нибудь наводки?
Правка: docker run -it console_test
работает. Это определенно проблема в конфигурации docker-compose.yml
.
Шаги по воспроизведению:
console_test/console.py
:
import threading
import time
import tqdm
import sys
print("Starting the test")
def job():
for i in tqdm.tqdm(range(50)):
time.sleep(0.1)
sys.stdout.flush() # this has no effect
# print("Hi") # this is printed though!
print("Finished.")
job_thread = threading.Thread(target=job)
job_thread.start()
while 1:
time.sleep(1)
console_test/Dockerfile
:
# Using official python runtime base image
FROM python:3.8.9
RUN pip install tqdm
COPY . .
ENV PYTHONUNBUFFERED=1 # removing this has no effect
ENV PYTHONIOENCODING=UTF-8 # removing this has no effect
ENTRYPOINT ["python", "console.py"]
docker-compose.yml
:
version: "3.2"
services:
console_test:
build: ./console_test
stdin_open: true # docker run -i // removing it has no effect
tty: true # docker run -t // removing it has no effect
И я управляю всем этим вот так:
docker-compose up --build console_test
Во время цикла for панель не отображается. После того, как он завершится и print
будет вызван, это результат:
Attaching to rotonda_console_test_1
console_test_1 | Starting the test
100% 50/50 [00:05<00:00, 9.97it/s]
console_test_1 | Finished.
Редактировать
Частичное решение:
После этого я обнаружил, что docker-compose run
вместо up
того, чтобы, по-видимому, устранить проблему. Хотя понятия не имею, почему.
Комментарии:
1. Вы пробовали бежать напрямую
docker run -it ...
? Каков же результат?2. @eagr Отличная мысль. Это действительно работает! Как я и подозревал, это определенно проблема с составлением докеров. Отредактируйте исходный вопрос с этой детализацией. ИЗМЕНИТЬ: Следуя этому [1],
docker-compose run
вместоup
того, чтобы, похоже, устранить проблему. Понятия не имею, почему. [1]: github.com/tqdm/tqdm/issues/771