Назад | Перейти на главную страницу

Docker-compose stop не останавливает все контейнеры

У меня есть приложение test rails 5.2.2, работающее в докере, и оно не сообщает об ошибках в консоли, но когда я запускаю docker-compose stop есть 1 контейнер, который не останавливается. Моя операционная система - это macos с Docker для Mac. Контейнер, который не останавливается, - это db_data.

docker-compose up перезапустит остановленный контейнер, и приложение продолжит нормально работать.

Вот мой файл для создания докеров

version: '3'
services:
  postgres:
    image: postgres
    env_file:
    - '.env'
    environment:
    - PGDATA=/var/lib/postgresql/data        
  db_data:
    image: postgres
    volumes:
    - /var/lib/postgresql/data
    command: /bin/true
  redis:
    image: redis
    ports:
    - "6379:6379"
  web:
    build: .
    command: "bin/bundle exec rails s -p 3000 -b 0.0.0.0"
    depends_on:
    - redis
    - postgres
    env_file:
    - '.env'
    environment:
    - RAILS_ENV=development
    - REDIS_URL=redis
    - REDIS_PORT=6379
    volumes:
    - .:/usr/src/app
    - gem_cache:/gems
    ports:
    - "3000:3000"
    environment:
    - WEBPACKER_DEV_SERVER_HOST=webpack_dev_server
  webpack_dev_server:
    build: .
    command: ./bin/webpack-dev-server
    ports:
    - "3035:3035"
    env_file:
    - '.env'
    environment:
    - RAILS_ENV=development
    - REDIS_URL=redis
    - REDIS_PORT=6379
    - WEBPACKER_DEV_SERVER_HOST=0.0.0.0
    volumes:
    - .:/usr/src/app
    - gem_cache:/gems

volumes:
  gem_cache:

Вы, наверное, уже поняли это, но ваш db_data служба выполняет команду /bin/true. Если вы посмотрите на точку входа в Dockerfile это для docker-entrypoint.sh. Внутри этого скрипта есть строка if [ "$1" = 'postgres' ]; then ..., поэтому, когда вы проходите /bin/true в качестве команды этот блок пропускается (некоторый сценарий инициализации), и контейнер немедленно закрывается.

Вы не видите имя контейнера при запуске docker-compose stop потому что он, вероятно, не работал.