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」でコンテナ内にコピーするのは手間だと思いますので、設定しておくことをお勧めします。
コメント