Skip to content

Blog

Docker でボリュームを相対パスで指定する

Docker でボリュームをマウントする際は絶対パスで指定します。 これを相対パスで指定するとエラーになってしまいます。

1
2
3
# docker run -d -p 80:80 --name httpd -v ./:/usr/local/apache2/htdocs httpd
docker: Error response from daemon: create ./: "./" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path.
See 'docker run --help'.

これを回避するには $(pwd) 環境変数などを用いて相対パスを表現します。 この方法であればエラーにならず、実行することが出来ます。

1
docker run -d -p 80:80 --name httpd -v $(pwd):/usr/local/apache2/htdocs httpd

もしくは docker-compose を利用します。

カスタマイズした設定ファイルで Tiny File Manager の Docker コンテナを起動する

先日、簡易ファイルアップローダ「Tiny File Manager」を Docker で起動する というメモを書きました。 標準の設定ファイルでは「タイムゾーンが UTC」「時刻の表記が日本に馴染みのない方式」「ユーザ認証がかかっている」などの設定になっています。 これらをカスタマイズした設定ファイルを指定した上で Tiny File Manager の Docker コンテナを起動する方法をメモしておきます。 作業は Rocky Linux8 上で実施しました。

簡易ファイルアップローダ「Tiny File Manager」を Docker で起動する

Tiny File Manager は PHP ベースの簡易ファイルマネージャです。 直接、システムにインストールしても勿論問題ありませんが、今回は tigerdockermediocore/tinyfilemanager-docker で公開されている Docker コンテナイメージを使い、簡単に Tiny File Manager を動作させる手順をメモしておきます。 動作確認は Rocky Linux8 上で行いました。 今回はあくまでテストということで「Nginx で公開している Document Root を Tiny File Manager で公開する」というシナリオを実装します。

CML 上の Ubuntu は UI 表示と実機のインターフェイス番号がずれている

Cisco CML2 上で Ubuntu を配置すると最初のインターフェイス名は ens3 です。

file

ですが、実際に Ubuntu 上で認識されるインターフェイスは ens2 から開始しますので注意が必要です。

1
2
3
4
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:0a:97:51 brd ff:ff:ff:ff:ff:ff

Rocky Linux8 + Nginx + PHP 8.1 + h5ai で DirectoryIndex を見栄え良くする

以前に Nginx 関連で下記のメモを書きました。

今回は Rocky Linux 8 上の Nginx と PHP 8.1 環境へ、更に h5ai をインストールして DirectoryIndex の見栄えを改善してみましたので、手順をメモしておきます。 Nginx と PHP をインストールするまでの手順は過去のメモと同じです。

Rocky Linux8 に Nginx と remi から PHP 8.1 をインストールする

Rocky Linux 8 へ Nginx と PHP 8.1 をインストールする手順をメモしておきます。 PHP は remi からインストールしました。

Nginx のインストール

Nginx をインストールします。

1
2
dnf config-manager --add-repo https://s3.sig9.org/repos/nginx.repo
dnf install -y nginx

PHP のインストール

remi から PHP をインストールします。 敢えて現時点で最新のバージョン 8.1 をインストールしてみました。

1
2
dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf -y install php81

php-fpm の設定

php-fpm の設定ファイルは /etc/opt/remi/php81/php-fpm.d/www.conf にあります。 ユーザやグループ等の設定を書き換えます。 デフォルトでは listen.acl_users で POSIX ACL が有効になっていた為、これを無効化して listen.ownerlisten.group を利用出来るようにしています。

1
2
3
4
5
6
sed -i -e "s/^user = apache/user = nginx/g" /etc/opt/remi/php81/php-fpm.d/www.conf
sed -i -e "s/^group = apache/group = nginx/g" /etc/opt/remi/php81/php-fpm.d/www.conf
sed -i -e "s/^;listen.owner = nobody/listen.owner = nginx/g" /etc/opt/remi/php81/php-fpm.d/www.conf
sed -i -e "s/^;listen.group = nobody/listen.group = nginx/g" /etc/opt/remi/php81/php-fpm.d/www.conf
sed -i -e "s/^;listen.mode = 0660/listen.mode = 0660/g" /etc/opt/remi/php81/php-fpm.d/www.conf
sed -i -e "s/^listen.acl_users = apache/;listen.acl_users = apache/g" /etc/opt/remi/php81/php-fpm.d/www.conf

Nginx の設定

Nginx の設定ファイルのうち、/etc/nginx/conf.d/default.conf を以下のように修正します。 拡張子 .php のファイルは UNIX ソケット経由で php-fpm へ転送します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
cat << 'EOF' > /etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        root           /usr/share/nginx/html;
        fastcgi_pass   unix:/var/opt/remi/php81/run/php-fpm/www.sock;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}
EOF

PHP テスト用ファイルの作成

phpinfo を呼び出すテスト用ファイルを作成します。

1
2
3
4
5
cat << 'EOF' > /usr/share/nginx/html/info.php
<?php
  phpinfo();
?>
EOF

Nginx と php-fpm の起動

ここまでの準備が完了したら Nginx と php-fpm を起動&自動起動設定します。

1
2
systemctl start nginx.service php81-php-fpm.service
systemctl enable nginx.service php81-php-fpm.service

テスト用ファイルの表示

ブラウザから http://ADDRESS/info.php へアクセスし、phpinfo の内容が表示されれば正常です。

file

参考

/etc/nginx/conf.d/default.conf の初期内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}