19893


次の手順で Cassandra のインストールをしました。

[code]

    (コンテナ内で Bash を起動)
    $ docker run -ti centos:7 /bin/bash
    
    (Cassandra のインストールのための yum リポジトリを登録)
    # cat > /etc/yum.repos.d/datastax.repo
    [datastax]
    name = DataStax Repo for Apache Cassandra
    baseurl = http://rpm.datastax.com/community
    enabled = 1
    gpgcheck = 0
    
    (Cassandra のインストール)
    # yum install initscripts java-1.8.0-openjdk-devel cassandra22-tools -y
    
[/code]

ところが、起動しようとすると `su: cannot open session: Permission denied` とのログが出力されます。

[code]

    (Cassandra の起動 - きちんと起動しているように見える)
    # service cassandra start
    Starting Cassandra: OK
    
    (ところが Cassandra プロセスは起動していない)
    # ps aux | grep java
    root       190  0.0  0.0   9040   816 ?        S+   08:08   0:00 grep --color=auto java
    
    (ログには Permission denied とある)
    # cat /var/log/cassandra/cassandra.log
    su: cannot open session: Permission denied
    
[/code]

どうやら、起動スクリプト内で Cassandra ユーザーになろうとして失敗しているようです。

[code]

    # su - cassandra
    su: cannot open session: Permission denied
    
[/code]

この問題はどのように修正すればよいでしょうか? `/etc/init.d/cassandra` で強制的に Cassandra を `root`
で立ち上げるようにすれば起動するのですが、筋が良くないように思います。


CC BY-SA 3.0
2015-12-11T08:31:35.827
19874
2015-12-11T15:48:17.073
13623
question
docker cassandra
Docker コンテナ内での Cassandra の起動


/etc/security/limits.d/cassandra.conf で cassandra
ユーザーのリソース(ulimit)を設定しているのですが、docker コンテナ内では memlock の値を上げることができないようです。

[code]

    (su に失敗)
    [root]# cat /etc/security/limits.d/cassandra.conf
    cassandra - memlock unlimited
    cassandra - nofile 100000
    cassandra - nproc 32768
    cassandra - as unlimited
    [root]# su - cassandra -c /bin/whoami
    su: cannot open session: Permission denied
    
    (memlock を設定しないと su できる)
    [root]# cat /etc/security/limits.d/cassandra.conf
    cassandra - nofile 100000
    cassandra - nproc 32768
    cassandra - as unlimited
    [root]# su - cassandra -c /bin/whoami
    cassandra
    
[/code]

docker run の "--ulimit" オプションで上限を引き上げることができそうです。

[code]

    docker run -ti --ulimit memlock=-1 centos:7 /bin/bash
    ※"memlock=unlimited" はエラーとなります。"-1" で設定できるようです。
    
[/code]

ちなみに、"session" は Linux PAM の session のことだと思います(説明省略、検索してください)。  
/etc/pam.d/su の session 設定 → /etc/pam.d/system-auth の session 設定 →
pam_limits.so → /etc/security/{limits.conf,limits.d/*}


CC BY-SA 3.0
2015-12-11T15:48:17.073
19893
2015-12-11T15:48:17.073
4603
19874
answer