Docker-compose stop 不会停止所有容器

Docker-compose stop 不会停止所有容器

我有一个在 docker 中运行的测试 rails 5.2.2 应用程序,控制台中没有报告任何错误,但运行时docker-compose stop有一个容器不会停止。我的操作系统是运行 Docker for Mac 的 macos。不会停止的容器是 db_data。

docker-compose up将重新启动已停止的容器并且应用程序继续正常运行。

这是我的 docker-compose 文件

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:

答案1

你可能已经知道了,但你的db_data服务正在运行命令/bin/true。如果你查看Dockerfile它是docker-entrypoint.sh。该脚本里面有行if [ "$1" = 'postgres' ]; then ...,因此当您作为命令传入时,/bin/true此块将被绕过(某些初始化脚本)并且容器将立即退出。

运行时您看不到容器名称,docker-compose stop因为它可能没有运行。

相关内容