【Docker】ホストOSにコンテナ内のディレクトリをマウントする


この記事はプロモーションを含みます。

Dockerコンテナ内にあるディレクトリをホストOSにマウントする方法を解説します。
マウントしておくことで、「docker cp」などのコマンドを使用せずにファイルの授受を行うことが可能になります。

今回は「Ansible AWX」のコンテナにあるディレクトリをホストOSにマウントしたいと思います。

マウント

まずは、ホスト側にマウントするためのディレクトリを作成します。
ここでは、「/home/workspace/」を作成しました。

[root@localhost ~]# mkdir /home/workspace/
[root@localhost ~]# ls -ld /home/workspace/
drwxr-xr-x 2 root root 6  2月 22 15:19 /home/workspace/

次に現在のコンテナの状態を確認します。
今回は、黄色の文字のコンテナ「awx_task」にあるディレクトリをマウントしたいと思います。

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED       STATUS          PORTS                                   NAMES
f2704b733879   ansible/awx:15.0.1   "/usr/bin/tini -- /u…"   4 weeks ago   Up 54 minutes   8052/tcp                                awx_task
67c948c5d3fe   ansible/awx:15.0.1   "/usr/bin/tini -- /b…"   4 weeks ago   Up 54 minutes   0.0.0.0:80->8052/tcp, :::80->8052/tcp   awx_web
c8c6057ffd10   postgres:10          "docker-entrypoint.s…"   4 weeks ago   Up 54 minutes   5432/tcp                                awx_postgres
9a34f1f884c1   redis                "docker-entrypoint.s…"   4 weeks ago   Up 54 minutes   6379/tcp                                awx_redis

「awx_task」コンテナに接続し、マウント先のディレクトリを作成します。
「docker exec -it awx_task /bin/bash」コマンドでコンテナに接続し、「mkdir /home/workspace/」ディレクトリを作成しました。

[root@localhost ~]# docker exec -it awx_task /bin/bash
bash-4.4# mkdir /home/workspace/
bash-4.4# ls -ld /home/workspace/
drwxr-xr-x 2 root root 6 Feb 22 19:31 /home/workspace/
bash-4.4# exit
exit

マウントを行うため、コンテナの定義ファイル「/var/lib/awx/awxcompose/docker-compose.yml」を修正します。

[root@localhost ~]# vi /var/lib/awx/awxcompose/docker-compose.yml

「awx_task」の「volumes」に、先ほど作成したディレクトリをマウントする設定「- “/home/workspace:/home/workspace:rw”」を追記します。
下記では黄色文字の箇所になります。

~~~省略~~~
  task:
    image: ansible/awx:15.0.1
    container_name: awx_task
    depends_on:
      - redis
      - web
      - postgres
    command: /usr/bin/launch_awx_task.sh
    hostname: awx
    user: root
    restart: unless-stopped
    volumes:
      - supervisor-socket:/var/run/supervisor
      - rsyslog-socket:/var/run/awx-rsyslog/
      - rsyslog-config:/var/lib/awx/rsyslog/
      - "/var/lib/awx/awxcompose/SECRET_KEY:/etc/tower/SECRET_KEY"
      - "/var/lib/awx/awxcompose/environment.sh:/etc/tower/conf.d/environment.sh"
      - "/var/lib/awx/awxcompose/credentials.py:/etc/tower/conf.d/credentials.py"
      - "/var/lib/awx/awxcompose/redis_socket:/var/run/redis/:rw"
      - "/var/lib/awx/projects:/var/lib/awx/projects:rw"
      - "/home/workspace:/home/workspace:rw"
~~~省略~~~

Dockerコンテナの停止→起動(設定の反映)を行います。

[root@localhost ~]# cd /var/lib/awx/awxcompose/
[root@localhost awxcompose]# docker-compose stop
Stopping awx_task     ... done
Stopping awx_web      ... done
Stopping awx_redis    ... done
Stopping awx_postgres ... done
[root@localhost awxcompose]# docker-compose up -d
Starting awx_postgres ... done
Starting awx_redis    ... done
Recreating awx_web    ... done
Recreating awx_task   ... done

以上でマウントは完了となります。
次は正しくマウントされているかの確認を行います。

確認

ここでは、正しくマウントされているを確認します。
Dockerコンテナに接続して、「df」コマンドを実行します。

[root@localhost awxcompose]# docker exec -it awx_task /bin/bash
bash-4.4# df
Filesystem                 1K-blocks    Used Available Use% Mounted on
overlay                     14034944 4812676   9222268  35% /
tmpfs                          65536       0     65536   0% /dev
tmpfs                        1912904       0   1912904   0% /sys/fs/cgroup
shm                            65536     144     65392   1% /dev/shm
/dev/mapper/almalinux-root  14034944 4812676   9222268  35% /home/workspace
tmpfs                        1912904       0   1912904   0% /proc/asound
tmpfs                        1912904       0   1912904   0% /proc/acpi
tmpfs                        1912904       0   1912904   0% /proc/scsi
tmpfs                        1912904       0   1912904   0% /sys/firmware

黄色文字のように「/home/workspace」がマウントされていることが確認できます。

試しに、ホストOS側で適当なファイルを作成し、コンテナからも参照出来るか確認してみます。
ホストOS側に「xyz.txt」を作成してみました。

[root@localhost awxcompose]# touch /home/workspace/xyz.txt
[root@localhost awxcompose]# ls -l /home/workspace/xyz.txt
-rw-r--r-- 1 root root 0  2月 22 17:21 /home/workspace/xyz.txt

コンテナに接続して、「xyz.txt」があるかを確認してみます。

[root@localhost awxcompose]# docker exec -it awx_task /bin/bash
bash-4.4# ls -l /home/workspace/xyz.txt
-rw-r--r-- 1 root root 0 Feb 22 22:21 /home/workspace/xyz.txt

タイムゾーンの設定が異なるため、日時にズレが生じていますが、ファイルを参照することが出来ました。

記事は以上になります。
この設定を1度行っておくことで、以降はホストOSにファイルを配置することでコンテナ内からでも参照出来るようになりました。
毎回「docker cp」でコンテナ内にコピーするのは手間だと思いますので、設定しておくことをお勧めします。

コメント

タイトルとURLをコピーしました