i am not new to docker but i mostly work with prebuilt images, that i connect using docker-compose. I need a super-basic container, that only reads log files and streams the contents to stdout because i have permission issues in another container.
See: https://github.com/webdevops/Dockerfile/issues/332
Anyway - i fail at the very first step and dont know whats the problem
Here is my Dockerfile:
FROM alpine:latest
COPY readlogs.sh /root/readlogs.sh
CMD ['/root/readlogs.sh']
The sheel script looks like this (at the moment - i am testing)
#!/usr/bin/env bash
echo "hello world"
#cat /dev/null > /var/log/app/error.log
#cat /dev/null > /var/log/app/debug.log
#tail -f /var/log/app/error.log > /dev/stderr &
#tail -f /var/log/app/debug.log > /dev/stdout &
As you see i want to truncate some log file and then just read it continously.
Building the image works fine, starting it results in:
/bin/sh: [/root/readlogs.sh]: not found
exited with code 127
NO - the line endings are not DOS.
My docker-compose.yml
logreader:
build:
context: docker/logreader
dockerfile: Dockerfile
volumes:
- ./var/logs:/var/log/app
So - why the funk cant i execute the readlogs.sh file?
The file is executeable (on the host), i tried adding RUN chmod +x /root/readlogs.sh but it did not work either.
For the file not found issue, you need to replace CMD ['/root/readlogs.sh'] for CMD [ "/root/readlogs.sh" ]. Notice the double quotes and the whitespace.
But even after you fix this one, you would still have another issue which is that you're trying to use bash in alpine. So you need to change to sh as Linpy said.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With