I am trying to build a development compose.yaml
to mimic what I hope to be my production deployment. Currently it looks like the following using bin/dev
.
services:
web:
build:
context: ./
dockerfile: Dockerfile.dev
command: bash -c "rm -f tmp/pids/server.pid && bin/dev"
volumes:
- .:/usr/src/app
ports:
- "3000:3000"
env_file:
- .env/development/db
- .env/development/web
db:
image: postgres:16
ports:
- "5432:5432"
volumes:
- pg_data:/var/lib/postgresql/data
env_file:
- .env/development/db
redis:
image: redis
volumes:
- redis_data:/data
volumes:
pg_data:
redis_data:
The Procfile.dev
looks like:
web: bin/rails server -p 3000 -b 0.0.0.0
css: bin/rails tailwindcss:watch
When I try to start up the web service, I get the following output.
✗ docker compose up web
[+] Running 1/1
✔ Container dbventure-web-1 Recreated 0.1s
Attaching to web-1
web-1 | Preparing database...
web-1 | 13:27:13 web.1 | started with pid 21
web-1 | 13:27:13 css.1 | started with pid 22
web-1 | 13:27:14 web.1 | => Booting Puma
web-1 | 13:27:14 web.1 | => Rails 7.1.3.4 application starting in development
web-1 | 13:27:14 web.1 | => Run `bin/rails server --help` for more startup options
web-1 | 13:27:14 web.1 | Puma starting in single mode...
web-1 | 13:27:14 web.1 | * Puma version: 6.4.2 (ruby 3.3.1-p55) ("The Eagle of Durango")
web-1 | 13:27:14 web.1 | * Min threads: 5
web-1 | 13:27:14 web.1 | * Max threads: 5
web-1 | 13:27:14 web.1 | * Environment: development
web-1 | 13:27:14 web.1 | * PID: 21
web-1 | 13:27:14 web.1 | * Listening on http://0.0.0.0:3000
web-1 | 13:27:14 web.1 | Use Ctrl-C to stop
web-1 | 13:27:15 css.1 | exited with code 0
web-1 | 13:27:15 system | sending SIGTERM to all processes
web-1 | 13:27:15 web.1 | - Gracefully stopping, waiting for requests to finish
web-1 | 13:27:15 web.1 | Exiting
web-1 | 13:27:16 web.1 | terminated by SIGTERM
web-1 exited with code 0
If I comment out the web
entry in the Procfile.dev
(or if I simply call bin/rails tailwindcss:watch
in the compose.yaml
) it also dies immediately.
Questions: Am I just missing something about how that tailwindcss:watch
would work in a Docker container or, alternately, is there a way to debug what's happening behind the scenes that would help me figure out why the SIGTERM
is being sent?
tailwind:watch
because you have no need for live reload; 2) There is a few notes in the Docs regarding thetailwind:watch
command when it comes to Docker containers, also included in the Troubleshooting section.css: bin/rails tailwindcss:watch[always]
) worked perfectly If you'd like to turn that into an answer? My fix involved updatingProcfile.dev
as well as addingapp
to mychown
'd directories for the rails user in the Dockerfile so that tailwind could write the updates