LINUX.ORG.RU

Как правильно наследовать Dockerfile-ы?

 , dockerfile,


0

2

Уважаемый ЛОР, выручай.

То, что я вижу, ломает мои понимания картины мира докера. Возможно, недочитал, возможно, инакомыслил.

Есть докерфайл, от которого я хочу унаследоваться и чуть докрутить под себя. Он тут: https://github.com/minetest/minetest/blob/master/Dockerfile

В нем есть сборка запускаемой части:

FROM $DOCKER_IMAGE AS runtime

RUN apk add --no-cache curl gmp libstdc++ libgcc libpq jsoncpp zstd-libs \
				sqlite-libs postgresql hiredis leveldb && \
	adduser -D minetest --uid 30000 -h /var/lib/minetest && \
	chown -R minetest:minetest /var/lib/minetest

WORKDIR /var/lib/minetest

COPY --from=builder /usr/local/share/luanti /usr/local/share/luanti
COPY --from=builder /usr/local/bin/luantiserver /usr/local/bin/luantiserver
COPY --from=builder /usr/local/share/doc/luanti/minetest.conf.example /etc/minetest/minetest.conf
COPY --from=builder /usr/local/lib/libspatialindex* /usr/local/lib/
COPY --from=builder /usr/local/lib/libluajit* /usr/local/lib/
USER minetest:minetest

EXPOSE 30000/udp 30000/tcp
VOLUME /var/lib/minetest/ /etc/minetest/

ENTRYPOINT ["/usr/local/bin/luantiserver"]
CMD ["--config", "/etc/minetest/minetest.conf"]

Я делаю такое

FROM lscr.io/linuxserver/minetest:latest

RUN apk add --no-cache luajit lua5.1-socket

EXPOSE 29999

RUN echo "#!/usr/bin/env bash" > /usr/local/bin/ipv4
RUN echo "ifconfig | grep -A 1 eth0 | tail -n 1 | awk '{ print \$2 }' | sed 's/addr://'" >> /usr/local/bin/ipv4
RUN chmod o+x /usr/local/bin/ipv4

RUN echo "#!/usr/bin/env bash" > /usr/local/bin/start_luanti
RUN echo "export IPV4=$(/usr/bin/ipv4)" >> /usr/local/bin/start_luanti
RUN echo "/usr/local/bin/luantiserver --config /etc/minetest/minetest.conf" >> /usr/local/bin/start_luanti
RUN chmod o+x /usr/local/bin/start_luanti

#ENTRYPOINT ["/usr/local/bin/start_luanti"]

ENTRYPOINT ["/usr/local/bin/luantiserver"]
CMD ["--config", "/etc/minetest/minetest.conf"]

#RUN echo "#!/usr/bin/env bash" > /usr/bin/app
#RUN echo "for ((;;))" >> /usr/bin/app
#RUN echo "do" >> /usr/bin/app
#RUN echo "sleep 1" >> /usr/bin/app
#RUN echo "done" >> /usr/bin/app
#RUN chmod o+x /usr/bin/app
#ENTRYPOINT ["bash", "/usr/bin/app"]

Пытаюсь прикрутить мод, которому нужно чуть больше, чем положить в папку и разархивировать.

И я получаю ошибку

[+] Running 1/0
 ✔ Container minetest-server  Recreated                                                                                                                                                                                                 0.1s 
Attaching to minetest-server
Gracefully stopping... (press Ctrl+C again to force)
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: exec: "/usr/local/bin/luantiserver": stat /usr/local/bin/luantiserver: no such file or directory: unknown

Т.е. при сборке не собралось то, что заложено в «родительском» докерфайле - вот как так? Как это работает? Как мне унаследоваться от стадии runtime?

★★★★★

Как мне унаследоваться от стадии runtime

Никак, это внутренние промежуточные состояния во время сборки апстримного образа. Ты можешь отнаследоваться только от финального образа, который где-то выложен.

gaylord
()