vishnubob / wait-for-it

Pure bash script to test and wait on the availability of a TCP host and port
MIT License
9.42k stars 2.27k forks source link

Can you make an /bin/sh version for use with alpine linux ? #18

Open blacktop opened 8 years ago

blacktop commented 8 years ago

That would be awesome !

raphaelahrens commented 8 years ago

I made an POSIX version, which you can find here. It uses nc and @vishnubob prefers a version that has minimum dependencies, so it was not merged. See the closed pull request

blacktop commented 8 years ago

First off thank you @raphaelahrens that is awesome! second off @vishnubob I understand your desire to keep the dependancies to 0, but nc is included in alpine and with the docker community all moving to alpine I think it would still be valuable?

@raphaelahrens when I run your script with no timeout setting I kept getting the error: timeout: can't execute '15': No such file or directory 15 being the default TIMEOUT. However, when I used -1 no-timeout it worked?

raphaelahrens commented 8 years ago

@blacktop could you create an issue on my fork and describe how you call the script and under which OS/distro?

blacktop commented 8 years ago

it looks like it is the same thing that happened here #5

blacktop commented 8 years ago

also there is no UI in github for issues on forks.

blacktop commented 8 years ago

Pull Requests #17 fixes it for me, but requires I install bash :(

raphaelahrens commented 8 years ago

@blacktop Ah ok I will take a look at it seems like alpine doesn't have timeout either.

yakhyadabo commented 8 years ago

It doesn't work for Alpine Linux.

maxcnunes commented 8 years ago

Let me share a tool I have written in Go with cross platform support and which has the same purpose of this project (even the name is the same) https://github.com/maxcnunes/waitforit.

blacktop commented 8 years ago

@maxcnunes that is a really nice solution to this problem 👏

james-turner commented 7 years ago

There is always https://github.com/depop/wait-for-it but it has a reliance on bash shell. It also supports multiple host waits

eddieajau commented 7 years ago

@raphaelahrens have you had any trouble with nc returning a "bad address" error?

raphaelahrens commented 7 years ago

@eddieajau no I haven't. Sounds like an address resolution problem. Is the address reachable from the machine/vm?

eddieajau commented 7 years ago

@raphaelahrens so the problem is that when our Docker machine is spinning up, some of the containers take time to register their host names. While wait-for-it will genuinely wait for a port to open, it exits immediately if the host is not yet resolvable. This is because nc will exit with a code of 1 immediately, causing timeout to exit as well.

So the issue is that wait-for-it also needs to be able to wait for a host to be available within the given TIMEOUT.

ettore26 commented 7 years ago

In the meantime wait-for-command can help. It is a Posix sh compliant which receives a command an waits for a specific exit status to finish waiting. It does not depend on a specific command so you could use whatever your distribution has available.

In Alpine Linux for port 5432 you could do:

Also for other distributions you could use:

Notice you can specify the matching exit status with -s.

MichaelMackus commented 7 years ago

:+1:

Would much prefer a POSIX version, but @ettore26's solution should be good enough for now.

typekpb commented 7 years ago

hey guys, maybe a bit late for the party, but there is another (POSIX shell compliant) alternative capable of waiting for any type of command called: wtfc. It's heavily inspired by @ettore26 solution and well tested on different envs (Busybox, Alpine, Debian, OSX, see: https://travis-ci.org/typekpb/wtfc)

ohsun0405 commented 3 years ago

I'd rather using nc command on alpine to wait for tcp connection.

while ! nc -z rails 3000 ; do sleep 1 ; done