как выполнить команду в командной строке, которая выполняется в docker cli

#docker #docker-compose #rspec

Вопрос:

Я хочу запустить свой тест rails rspec на докере. Если я открою Cli через рабочий стол docker и напишу

-спецификация rspec исполнителя пакета

мои тесты проходят. Что я хочу, так это запустить свои тесты с помощью команды в файле makefile, которая создает мой образ, и выполнить эту команду

Ответ №1:

Я смог запустить тесты с помощью кода

docker-создать запуск ${ИМЯ_ОБРАЗА} пакет спецификация exec rspec

Ответ №2:

Обычно я запускаю модульные тесты на хосте, прежде чем создавать контейнеры Docker. Я не включаю тесты внутри изображения.

 gem install bundler:2.2.26
bundle exec rspec
docker build -t myapp:20210824
docker run -d -p 8000:8000 myapp:20210824
 

В контексте Makefile у меня были бы эти отдельные шаги, но я бы не хотел, чтобы они сильно зависели друг от друга.

 .PHONY: rspec docker-build docker-run
all: rspec docker-build
run: rspec docker-run
DOCKER_TAG := latest

.bundled: Gemfile Gemfile.lock
        bundle install
        touch "$@"

rspec: .bundled
        bundle exec rspec

docker-build: .docker-build
.docker-build:
        docker build -t myapp:$(DOCKER_TAG) .
        touch "$@"

docker-run: .docker-build
        docker run -p 8000:8000 myapp:$(DOCKER_TAG)

clean:
        rm -f .bundled .docker-build
 

Обратите внимание, что для этого пути не требуется docker exec или работающий контейнер, и вы можете безопасно включить spec каталог в .dockerignore файл, чтобы исключить его из изображения.