Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Watch fails silently in docker node:lts #370

Closed
dievardump opened this issue Jan 29, 2021 · 10 comments
Closed

Watch fails silently in docker node:lts #370

dievardump opened this issue Jan 29, 2021 · 10 comments

Comments

@dievardump
Copy link

dievardump commented Jan 29, 2021

I have a problem with postcss-cli which doesn't work in watch mode in a node docker image

Here is a minimal repo that reproduce the problem: https://github.com/dievardump/postcss-watch-docker

Problem

When launching docker with the command npm run dev (which is :set to "postcss ./src/app.pcss -o ./public/global.css --watch") nothing happens.
If launching with npm run buildor launching both of those commands outside of the docker, then everything works fine cd

Expected behavior

The file src/app.pcss should be bundled into public/global.css and any change to src/app.pcss should automatically re bundle the app.

@RyanZim
Copy link
Collaborator

RyanZim commented Jan 29, 2021

Unfortunately, I do not know enough about docker to really help you debug this. --watch never exits until it's manually killed; is the dev command exiting in docker?

@dievardump
Copy link
Author

Unfortunately, I do not know enough about docker to really help you debug this. --watch never exits until it's manually killed; is the dev command exiting in docker?

Not it's not exiting. It stays open, but never writes the bundle in the output file.

It is as if it's not doing anything, however the same command without --watch works perfectly.

I just created a repo with the minimal reproducible code, but it's usually in the middle of a stack with Svelte and other watch, but only postcss --watch fails without saying anything.

thought it my be some permissions problem in docker, but even a 777 on the whole project directory does not solve anything.

I guess I could use some other package to watch all .pcss files and recompile on change, but I have always been a postcss lover so if I could make the --watch works, that would be better.

I'm going to see if I can dive in the code and maybe get some console to find where it doesn't get things

@danoc
Copy link

danoc commented May 7, 2021

I'm seeing this as well. In my case, the postcss ... -w --verbose command immediately exits with status code 0 (and no output) if used as within scripts in the package.json file. Removing -w causes it to compile and print an output.

Oddly I'm able to get the file watching to work though if I do:

docker-compose exec frontend yarn run dev:tailwind

It just isn't working if it's part of the Yarn script that runs when I do docker-compose up frontend.

@dievardump, do you find a fix? I'm going to try watch as a workaround: https://www.npmjs.com/package/watch

@brianliddell
Copy link

I'm having the same problem when running NPM PostCSS tasks in Panic's new Nova editor:

  • The task npm run watch (which is set to "watch": "postcss site/stylesheets/main.css -o assets/style.css --watch") seems to run, but nothing happens.

  • But, just like the OP, the task npm run build, or running either of these commands in the macOS Terminal works just fine.

Panic's developers have suggested to me that:

  • "…we're most likely looking at an issue where the PostCSS CLI is not liking something about Nova's environment for running tasks, and what exactly that is would be more easily diagnosed by PostCSS's developers."

I don't have the skills to comment on this diagnosis!

But I'd be grateful for any updates, or suggestions to help resolve this weird issue.

Thanks!

@RyanZim
Copy link
Collaborator

RyanZim commented Jun 15, 2021

@dievardump any updates?

1 similar comment
@RyanZim

This comment has been minimized.

@dievardump
Copy link
Author

dievardump commented Jun 16, 2021

@dievardump any updates?

Sorry. I think docker, in some versions, does not implement the "emitting of events when files are modified" that watch uses, which blocks postcss from working there.

that's, if I recall correctly, the conclusion I got from looking around everywhere.

I might be wrong since it was now a few months ago and I just decided to stop using docker for watches

@RyanZim RyanZim closed this as completed Jun 17, 2021
@MarcoGlauser
Copy link

I noticed the same issue as @danoc and dug a bit further.
By default, docker doesn't open a tty when running a container.
I think this line is causing the immediate exit when docker is started in non-interactive mode. (no stdin/stdout gets allocated)

process.stdin.on('end', () => process.exit(0))

There's a way around with docker by starting it with the -it flags that will allocate a tty and stdin/stdout. Or in docker compose setting tty: true

However, I think it should be possible to start the watch mode without stdin present, since the watch mode is not really interactive.

@RyanZim
Copy link
Collaborator

RyanZim commented Sep 24, 2021

We have this line to allow ^D to exit watch mode, not sure if it's worth adding an option to disable it, given that there's a workaround in Docker.

@brianliddell
Copy link

brianliddell commented Sep 24, 2021 via email

ToppleTheNun added a commit to ToppleTheNun/postcss-cli that referenced this issue Jan 18, 2022
check if stdin is TTY before checking "end" event,
as non-TTY stdin will always invoke end and exit.

found from running "postcss -w" in a docker container (postcss#370)
and running "postcss -w" in lerna or turborepo.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants