Простой файл Dockerfile, который выполняет сценарий оболочки как точку входа, подобную этой
FROM python:3
WORKDIR /app
COPY . .
RUN chmod +x entrypoint.sh
CMD ["python", "/app/src/api.py"]
ENTRYPOINT ["./entrypoint.sh"]
работает: вызывается entrypoint.sh
, который сам выполняет python /app/src/api.py
на RPI 3.
entrypoint.sh
#!/bin/bash
echo starting entrypoint
set -x
exec "$@"
Поскольку мне не нужно ничего, специфичного для Debian / Raspbian c, я хотел бы использовать образ alpine для уменьшения размера образа. Поэтому я изменил FROM python:3
на FROM python:3-alpine
без каких-либо дальнейших изменений.
Но теперь контейнер не запускается:
api_1 | standard_init_linux.go:211: exec user process caused "no such file or directory"
test_api_1 exited with code 1
Почему это не работает на Alpine? Я не вижу никаких проблем, так как /app/entrypoint.sh
существует, и он также исполняемый:
Step 5/7 : RUN ls -lh
---> Running in d517a83c5b9b
total 12K
-rwxr-xr-x 1 root root 54 Jul 11 18:35 entrypoint.sh
drwxr-xr-x 2 root root 4.0K Jul 11 18:48 src
В аналогичном вопросе изображение было собрано в системе без руки. Для меня это не так, я строю непосредственно на RPI.
Не уверен, связано ли это с Raspbian или Alpine. Я также пробовал использовать абсолютный путь ENTRYPOINT ["/app/entrypoint.sh"]
: все еще работаю над изображением python:3
, но не в python:3-alpine
.