Docker Community Forums

Share and learn in the Docker community.

Docker compose: issue to start a container with a specific shell script

I would to start a container with specific shell script using docker compose. For example, a tomcat container starts initweb.sh creating the empty file /tmp/testweb

$ ls -lR
.:
total 8
-rw-rw-r-- 1 xxxxxx xxxxxx 223 déc. 4 19:45 docker-compose.yml
drwxrwxr-x 2 xxxxxx xxxxxx 4096 déc. 4 19:37 web

./web:
total 4
-rwxrwxr-x 1 xxxxxx xxxxxx 31 déc. 4 19:37 initweb.sh

$ cat docker-compose.yml
version: ‘3’
services:
web:
container_name: web
hostname: web
image: “tomcat:7.0-jdk8”
ports:
- 8080:8080
volumes:
- “./web/:/usr/local/bin/”
command: sh -c “/usr/local/bin/initweb.sh”

$ cat web/initweb.sh
#!/bin/bash
touch /tmp/testweb

When I execute docker-compose up

$ docker-compose up -d
Creating network “tomcat_default” with the default driver
Creating web … done

$ docker-compose run web ls -l /usr/local/bin/
total 4
-rwxrwxr-x 1 1000 1000 31 Dec 4 18:37 initweb.sh

$ docker-compose run web ls -l /tmp
total 4
drwxr-xr-x 1 root root 4096 Nov 24 01:29 hsperfdata_root

The owner of my script initweb.sh is not root, so maybe that’s why it is not executed but I don’t know how to resolve this issue.

Why would the owner be a problem as long as the permissions allow execution? This is true unless selinux. apparmor or acl’s is comming into the mix. Usualy they are the ones beeing responsible for odd behavior that doesn’t seem to make sense (if you have no idea that they are active on your system or have no idea how to “tame” them). For instance, on RHEL-based systems you need to add :z to the end of your volume declaration to make it allign with selinux