前回の内容の環境構築をDockerfileで作ろうとしてドハマりしました..
「mecab dockerfile」とググれば何個も参考になる記事が出てくるので楽勝だろうと踏んで作業開始。
しかし、Dockerfileを作りビルドしたところ、、
opt/mecab-ipadic-neologd/bin/../libexec/make-mecab-ipadic-neologd.sh: 505 行: 759 強制終了 ${MECAB_LIBEXEC_DIR}/mecab-dict-index -f UTF8 -t UTF8 The command '/bin/sh -c git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git && cd mecab-ipadic-neologd && ./bin/install-mecab-ipadic-neologd -n -y && cd .. && rm -rf mecab-ipadic-neologd' returned a non-zero code: 137
なに?
${MECAB_LIBEXEC_DIR}/mecab-dict-index -f UTF8 -t UTF8
でエラーだと?
全く原因がわからん.. (ググってもヒントがない)
と原因解明に数日をロスしてしまいましたが結論から書くと、
なんと単にdockerのメモリ不足が原因でした
dockerのメモリを2G -> 3Gに増やしたら問題なくビルドできました。。
めでたし
Docker for Mac だと Preferences からメモリサイズ変更できます。
メモリ要件に関しては mecab-ipadic-NEologdのオフィシャルページにちゃんと書いてました。
ちゃんと最初に一読せよということですね
Memory requirements Required: 1.5GB of RAM Recommend: 5GB of RAM
とのことです。
Dockerfile
今回の成果物
FROM ubuntu:16.04 RUN apt-get update \ && apt-get install -y python3 python3-pip git curl wget make xz-utils file sudo unzip \ && apt-get install -y mecab libmecab-dev mecab-ipadic-utf8 \ && apt-get install -y language-pack-ja \ && apt clean \ && update-locale LANG=ja_JP.UTF-8 # Set locale ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8 # Install mecab-ipadic-NEologd (Docker memory should be enough to compile) WORKDIR /opt RUN git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git \ && cd mecab-ipadic-neologd \ && ./bin/install-mecab-ipadic-neologd -n -y \ && cd .. \ && rm -rf mecab-ipadic-neologd # Set mecab-ipadic-NEologd as default RUN sed -i 's/dicdir = \/var\/lib\/mecab\/dic\/debian/dicdir = \/usr\/lib\/mecab\/dic\/mecab-ipadic-neologd/' /etc/mecabrc # Install python packages ADD requirements.txt /tmp/requirements.txt RUN pip3 install -r /tmp/requirements.txt # Install fonts RUN wget -O IPAfont00303.zip https://ipafont.ipa.go.jp/old/ipafont/IPAfont00303.php \ && unzip IPAfont00303.zip \ && mv IPAfont00303 fonts \ && rm IPAfont00303.zip # Add scripts ENV PYTHONPATH /opt ADD . . CMD ["bash"]
Pythonコードの日本語出力で UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1:
となるエラーにも遭遇しましたが これは locale周りの設定がdockerでできてなかったからでした