例えば、bootstrap.shをエントリポイントとして用意していて

1
2
3
4
5
/path/to/project/
├── app/
├── Dockerfile
├── bootstrap.sh
└── docker-compose.yml

Dockerfileはこんな感じ(Rails)

1
2
3
4
5
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /app
WORKDIR /app
COPY . /app

で、docker-compose.ymlを例えば次のようにした場合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: '2'

services:
web:
container_name: web
hostname: web
build: .
ports:
- "13000:3000"
environment:
- "TZ=Asia/Tokyo"
command: /bootstrap.sh
volumes:
- .:/app
- ./bootstrap.sh:/bootstrap.sh
tty: true

volumesに記載している、/bootstrap.shには、「bootstrap.sh」という名前のディレクトリが作成される

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: '2'

services:
web:
container_name: web
hostname: web
build: ${PWD}
ports:
- "13000:3000"
environment:
- "TZ=Asia/Tokyo"
command: /bootstrap.sh
volumes:
- ${PWD}:/app
- ${PWD}/bootstrap.sh:/bootstrap.sh
tty: true

相対パスにあるファイルをマウントするには、このように${PWD}を使用するなりして絶対パスでvolumesの指定を行う

補足

compose format version 3 では相対パスでも問題なかったので、対策がされたのかもしれない

参考:How to mount a single file in a volume

補足(の追記:2018-07-02)

docker-composeで次のようにする場合

1
$ docker-compose -f /path/to/AAA/docker-compose.yml -f /path/to/BBB/docker-compose.yml up -d

この時、相対パスで読み込み指定を行っていると、どちらかのymlファイル(おそらく最後に読んだほう。上記では「/path/to/BBB」)のディレクトリがベースとなり実行されるため、期待通りの結果にならない現象に遭遇した。

なので結果的に、どのようなケースでも絶対パスで書く癖をつけとくほうが無難な気がした