Jenkins(Docker)上で複数プロジェクト(Docker)のそれぞれのテストをしようとしたが、Volumeがマウントされない問題にぶちあたった

# 背景
社内で複数の案件が稼動していて、案件ごとにCI環境作るのはいやだったので、Jenkinsを立てて、Jenkins上で各案件のDockerを起動させようとしています。
CIサーバ（ホスト）上にDockerでJenkinsを起動しており、Dockerの中でDockerを起動してテストする感じです。
環境周りはこちらを参考にさせていただきました。
https://qiita.com/paper2/items/751246ee7dcae50d5042
### テスト対象
- 言語はPHP（Laravel)
- docker-composeを使ってローカル開発

### 流れはこんな感じにしようとしていた最中の話です
- Gitにdocker-compose.ymlとDockerfileをアップしてJenkinsへWebhook
- Jenkins側はPullしてdocker-compose upとtest実行をシェルで実行

# 各種設定ファイルの状態
### ディレクトリ構成
```
project_root
　├ docker
　│　　├ nginx
　│　　│　　├　Dockerfile
　│　　│　　├　　・・・
　│　　│　　└　nginx.conf
　│　　└ php-fpm
　│　　 　　├　Dockerfile
　│　　 　　├　　・・・
　│　　 　　└　php.ini
　├ docker-compose.yml
　├ app
　├ artisan
　├ ・・・
```
### Dockerfile
``` dockerfile:nginx/Dockerfile
FROM nginx:1.14

RUN apt-get update
RUN apt-get install -y vim less

COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./conf.d/default.conf /etc/nginx/conf.d/default.conf
COPY ./conf.d/php-upstream.conf /etc/nginx/conf.d/php-upstream.conf
```

``` dockerfile:php-fpm/Dockerfile
FROM php:7.2-fpm-stretch

# Install PHP extensions
RUN apt-get update && apt-get install -y \
    vim less \
    libpq-dev \
    libicu-dev \
    sqlite3 \
    libsqlite3-dev \
    && rm -r /var/lib/apt/lists/* \
    && docker-php-ext-install \
    pdo_sqlite \
    && pecl install xdebug \
    && docker-php-ext-enable xdebug

COPY ./php.ini /usr/local/etc/php-fpm.d/myphp.ini
COPY ./php-fpm.conf /usr/local/etc/php-fpm.d/myphp-fpm.conf

# Composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
    && php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
    && php composer-setup.php \
    && php -r "unlink('composer-setup.php');" \
    && mv composer.phar /usr/local/bin/composer

ENV COMPOSER_HOME /composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV PATH $PATH:/composer/vendor/bin
```
### Docker-Compose
``` yaml:docker-compose.yml
version: "3"
services:
  nginx:
    build: "./docker/nginx/"
    ports:
      - "8000:80"
      - "8001:8001"
    restart: always
    depends_on:
      - php-fpm
  php-fpm:
    build: "./docker/php-fpm/"
    volumes:
      - ${PWD}:/var/www/html
    environment:
      - "DB_DATABASE=/var/www/html/database/database.sqlite"
    restart: always
    working_dir: /var/www/html
```

# composer installでエラー
上記設定ファイルで、project_rootディレクトリ内で以下をコマンドで起動

```
# docker-compose up -d
```

ビルド自体は問題なく、コンテナの起動もOK

```
# docker-compose exec php-fpm composer install --prefer-dist --no-interaction
Composer could not find a composer.json file in /var/www/html
```
「composer.json」が見つからないとのこと。。。

ローカルでは問題ないのに、なんでだろうと思い、コンテナ内を確認

```
# docker-compose exec php-fpm ls /var/www/html
docker  laravel
```

マウントされてないじゃん！と思ってinspcetしたら、マウントされてるっぽい

```
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/var/jenkins_home/workspace/project_root",
                "Destination": "/var/www/html",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
```
Sourceのパスにはcomposer.jsonはある。
コンテナ内の「laravel」フォルダなんて、見知らぬもの。。。
詰んだ。。。


と思ったら、Jenkinsを起動しているホスト側の「/var/jenkins_home/workspace/project_root」を確認してみたら、あった！！

```
$ ls -la /var/jenkins_home/workspace/project_root
合計 0
drwxr-xr-x. 4 root root 35  2月  8 14:01 .
drwxr-xr-x. 4 root root 49  2月 20 09:30 ..
drwxr-xr-x. 4 root root 34  2月  8 14:01 docker
drwxr-xr-x. 2 root root  6  2月  8 14:01 laravel
```

Docker（Jenkins）もホストと以下のようなマウントしており、Docker（Jenkins）上のDockerもホスト側のディレクトリを参照しているっぽい。

```
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/var/run/docker.sock",
                "Destination": "/var/run/docker.sock",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/usr/bin/docker",
                "Destination": "/usr/bin/docker",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/usr/local/bin/docker-compose",
                "Destination": "/usr/bin/docker-compose",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/root/jenkins_home",
                "Destination": "/var/jenkins_home",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
```

/root/jenkins_home　しかマウントしてないけど、/var/jenkins_homeがコンテナ側から見えてる！？

# とりあえずの解決策
/root/jenkins_home でマウントしていたものをホストの/var/jenkins_homeに移動させ、ホストとコンテナ側でパスが同じになるように再マウント。以下のようなMount設定になるように変更。

``` yaml:変更前
                "Source": "/root/jenkins_home",
                "Destination": "/var/jenkins_home",
```

``` yaml:変更後
                "Source": "/var/jenkins_home",
                "Destination": "/var/jenkins_home",
```

ホストとコンテナのJenkins_homeは同一パスじゃないとだめってこと？

# あとがき
普通どうするのかわからないので、詳しい方教えてください！