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

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

Open
blacktop opened this issue Aug 2, 2016 · 18 comments
Open

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

blacktop opened this issue Aug 2, 2016 · 18 comments

Comments

@blacktop
Copy link

blacktop commented Aug 2, 2016

That would be awesome !

@raphaelahrens
Copy link

raphaelahrens commented Aug 2, 2016

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
Copy link
Author

blacktop commented Aug 2, 2016

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
Copy link

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

@blacktop
Copy link
Author

blacktop commented Aug 2, 2016

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

@blacktop
Copy link
Author

blacktop commented Aug 2, 2016

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

@blacktop
Copy link
Author

blacktop commented Aug 2, 2016

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

@raphaelahrens
Copy link

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

@yakhyadabo
Copy link

It doesn't work for Alpine Linux.

@maxcnunes
Copy link

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
Copy link
Author

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

@james-turner
Copy link

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
Copy link

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

@raphaelahrens
Copy link

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

@eddieajau
Copy link

@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
Copy link

ettore26 commented Mar 18, 2017

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:

  • ./wait-for-command.sh -c 'nc -z db 5432' && [your-after-the-wait-commands]

Also for other distributions you could use:

  • wait-for-command.sh -c 'echo > /dev/tcp/127.0.0.1/5432' && [your-after-the-wait-commands]
  • wait-for-command.sh -s 0 57 -c 'curl 127.0.0.1:5432' && [your-after-the-wait-commands]

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

@MichaelMackus
Copy link

👍

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

@typekpb
Copy link

typekpb commented May 31, 2017

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
Copy link

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

12 participants