MeCab用のDockerfile

前回の内容の環境構築を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 からメモリサイズ変更できます。 f:id:sanshonoki:20181009224611p:plain

メモリ要件に関しては 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でできてなかったからでした