I do some work on my MacBook with macOS, on my Windows laptop with Windows 10 and Ubuntu WSL. I work in Visual Studio Code onWindows while running Ansible scripts in my Ubuntu WSL on the same code base. What could possibly go wrong? While I spent the last few evenings debugging, I completely forgot about the obvious. I should know better, though.
CRLF vs LF
When working on my Windows machine I regular forget about file formats. While in many cases the systems are nowadays very resilient, when creating Docker containers this can end up in a big FUBR. In the likely case, you freshly built container using an entrypoint script tells you during a docker-compose up something like
standard_init_linux.go:xxx: exec user process caused "no such file or directory"
go and check the file format of the entrypoint script and switch to LF. At least Visual Studio Code makes it easy.
To bash or not to bash
In case you see exactly the same error, check the entrypoint script again. Is it using bash as mine?
Go ahead and make sure bash is installed in your image. Use something like the line below. On a very regular base, I completely forget about installing bash but keep trying to use it again and again.
apk add bash
No Permission
In case you encounter another obscure message telling you
standard_init_linux.go:xxx: exec user process caused "permission denied"
check the permissions of the entrypoint script.
chmod +x entrypoint.sh
should do it on on your host. As I run my deployment using Ansible, I use a task similar to
- name: Copy entrypoint.sh file
copy:
src: entrypoint.sh
dest: "{{ install_dir }}/entrypoint.sh"
owner: root
group: root
mode: 0755
force: yes
I am still not sure if setting755 and root are best practices and should be modified.