我有一个在 docker 中运行的测试 rails 5.2.2 应用程序,并且在控制台中没有报告任何错误,但是当我运行时docker-compose stop
有 1 个容器不会停止。我的操作系统是运行 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:
您可能已经想通了,但是您的
db_data
服务正在运行 command/bin/true
。如果您查看Dockerfile中的入口点,它是一个docker-entrypoint.sh
. 该脚本内部是 lineif [ "$1" = 'postgres' ]; then ...
,因此当您/bin/true
作为命令传入时,此块被绕过(一些初始化脚本)并且容器立即退出。运行时看不到容器名称,
docker-compose stop
因为它可能没有运行。