Вопрос:

"/ bin / sh": команда не найдена, но только на втором этапе сборки

docker dockerfile

10 просмотра

1 ответ

47 Репутация автора

Я пытаюсь создать Dockerfile для инструмента под названием «diesel-cli». Diesel - это ORM и Query Builder для Rustlang, и это их собственный инструмент CLI. Я хочу установить его в Docker, так как имеет смысл иметь инструмент CLI DB Dockerized, если DB тоже. Однако сам инструмент не важен.

У меня несколько вопросов , с фактически выполняя функции в моей предпочтительной конечной среде (Alpine Linux), с бытием ошибки: /bin/sh: diesel: not found.

Как вы можете видеть из Dockefile ниже, последний образ Rust Docker используется для установки инструмента и получения исполняемого файла. Затем исполняемый файл переносится в альпийское изображение, которое должно быть конечной средой, поскольку это значительно экономит размер изображения. Однако это вызывает ошибку, упомянутую выше.

Эта ошибка не возникает, если бы я вообще пропустил альпийскую стадию. Предполагая, что я закомментирую FROMи COPY, нет никаких проблем вообще. Я могу собрать и вызвать инструмент, как и ожидалось. Но образ Rust составляет почти 2 ГБ, не говоря уже о том, что содержит ненужные зависимости, что нежелательно.

С помощью RUN ls /bin/я могу подтвердить, что исполняемый файл перенесен в новую среду. Чтобы убедиться, что оба изображения запускают команду одинаково, я использовал docker ps -lс хоста, чтобы подтвердить использование обоих /bin/sh -c diesel, так что это тоже не объяснялось.

Dockerfile:

FROM rust:latest as builder

RUN cargo install diesel_cli --no-default-features --features postgres

FROM alpine:latest
COPY --from=builder /usr/local/cargo/bin/diesel /bin/diesel

ENV DATABASE_URL postgres://tempest_api:admin@postgres:5432/tempest

CMD "diesel"

Единственное сообщение об ошибке, которое я получаю, является довольно бесполезным /bin/sh: diesel: not found. После сборки и запуска цель состоит в том, чтобы сделать команду доступной с помощью простого docker run diesel ...(при условии, что изображение помечено как «дизель»).

Автор: Devildude4427 Источник Размещён: 11.08.2019 07:54

Ответы (1)


0 плюса

31 Репутация автора

На каком этапе вы получаете сообщение об ошибке?

Не могли бы вы попытаться записать полный путь к dieselвашему CMDзаявлению?

Также: rust:latestоснован на Alpine? Если нет, можете ли вы использовать изображение ржавчины со вкусом альпийского горла?

Автор: trpl Размещён: 11.08.2019 08:49
Вопросы из категории :
32x32