1

Я следующий Докер-Compose контейнер:я не могу запустить консоль с рельсов Докер и Passenger/Nginx изображение

# docker-compose.yml 
version: '2' 
services: 
web: 
    build: . 
    ports: 
    - "80:80" 
    volumes: 
    - .:/home/app/NAME_OF_MY_APP 
db: 
    image: postgres:9.4 
    ports: 
    - "5432" 
    environment: 
    POSTGRES_USER: 'postgres' 

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

Я попытался с:

sudo docker-compose run web rails c 

Но появляется следующее сообщение об ошибке:

ERROR: Cannot start service web: oci runtime error: exec: "rails": executable file not found in $PATH 

Кроме того, я попытался:

sudo docker-compose run web "rails c" 

Но кадры из фильма, показывая тот же результат.

Я хотел бы войти на консоль, ввести некоторых пользователей и сохранить их в базе данных postgres.

Заранее благодарен!

ответ

1

Сначала вы должны начать складывать свои контейнеры с docker-compose up, который запустит все ваши определенные сервисы. Затем вы можете прикреплять к своим работающим контейнерам по их имени. Вы получаете имена запущенных контейнеров с выхода docker ps и т.д .:

CONTAINER ID  IMAGE  COMMAND CREATED  STATUS    PORTS     NAMES 
d6b317a4c10b  image  "..." 27 hours ago Up 27 hours   0.0.0.0:4284->4284/tcp container1 
4fe15ab206b5  postgresql "..." 27 hours ago Up 27 hours   5432/tcp     container2 

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

docker exec -it container1 bash 

, который начинает bash внутри контейнера1. Оттуда вы можете выполнить любую команду, которая вам нравится, например. ваша консоль рельсов.

Также вы используете should use version 2 файлов, содержащих докеры, поскольку в версии 1 отсутствуют некоторые функции.

+0

Я пробовал ваше решение, но оно не работает. Он печатает ту же ошибку, что и раньше. Rails c - это запись в среду ruby ​​внутри приложения rails, поэтому я могу создавать пользователей вручную. – Ruffeng

+0

Тогда это не ошибка в самом Докере. Он должен находиться внутри вашего контейнера, когда вы даже не можете выполнить «рельсы». Я думаю, что рельсы настроены неправильно. Когда я пытаюсь выполнить его на своей машине с помощью «docker run -it rails bash», а затем введите «rails», он работает так, как ожидалось. – n2o

+0

Человек, это было потрясающе! Я обновил свою докер-композицию, и я включил ее через bash, и я мог бы сделать все, что хотел. Я действительно ценю твою помощь. Спасибо! – Ruffeng