On 14.12.2022 23:23, René Scharfe wrote:
I don't know "docker compose" well enough to say whether it's a bug,
but it seems it turns on some kind of terminal mode that needs both
stdin and stdout to be connected to a TTY after only checking that one
of them actually is. Why not check both?
Curious that only macOS should be affected. Is stdin of a hook script a
TTY on that platform? Or can "docker compose" handle stdin not being a
TTY and stdout being one there?
René
Well, seems like I somehow tested this wrong. Tried it again from
scratch and on linux I also get this error. So this looks like not a
bug. Docker compose CLI options page is a little confusing because of these:
>--interactive , -i true Keep STDIN open even if not attached.
>--no-TTY , -T true Disable pseudo-TTY allocation (default:
auto-detected).
>--tty , -t true Allocate a pseudo-TTY.
Second column with `true` values is titled `Default`, whatever it means.
So `--tty` and `--no-TTY` is set by default? Anyway, seems like it is
checking if at least one of stdout, stding, stderr is a tty and then
tries to allocate a tty to all.
You can check docs here
https://docs.docker.com/engine/reference/commandline/compose_run/#options
As a final solution I used makefile "magic" with `ifeq` and shell
command like this:
$(shell test -t 0)
ifeq ($(.SHELLSTATUS), 1)
ALLOCATE_TTY = --no-TTY
endif
docker compose run $(ALLOCATE_TTY) --rm --entrypoint "" app
/code/test.sh
Maybe I'll just write to to them to clarify documentation on how those
TTY options actually works by default.
Thanks for help with this.
Piotr