Dockerで、「nginx:1.13.5-alpine」 + 「php:7.3-fpm-alpine」 + 「mysql:5.7.19」のコンテナ構成で、 laraveを使うため、「node:12.13.0-alpine as node + php:7.3-fpm-alpine」として、Node.jsを入れる。
Dockerfileを以下のようにマルチステージビルドでdocker-composeをbuildしてupすると、エラー出力
Dockerfile
FROM node:12.13.0-alpine as node FROM php:7.3-fpm-alpine RUN docker-php-ext-install pdo_mysql mysqli mbstring WORKDIR /var/www/html COPY --from=node /usr/local/bin/node /usr/local/bin/ COPY --from=node /usr/local/lib/node_modules/ /usr/local/lib/node_modules/ RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs \ && ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \ && ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npx
Nodeを実行すると No such file or directory | symbol not foundのエラーが大量に出る
$ sudo docker exec -it {containerId} sh /var/www/html # php -v PHP 7.3.15 (cli) (built: Feb 20 2020 23:51:19) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.15, Copyright (c) 1998-2018 Zend Technologies /var/www/html # node --version Error loading shared library libstdc++.so.6: No such file or directory (needed by /usr/local/bin/node) Error loading shared library libgcc_s.so.1: No such file or directory (needed by /usr/local/bin/node) Error relocating /usr/local/bin/node: _ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode: symbol not found Error relocating /usr/local/bin/node: _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9push_backEc: symbol not found Error relocating /usr/local/bin/node: _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6resizeEmc: symbol not found // 省略
共有ライブラリを使っていてエラーになるらしい
Docker fileに以下の2行を追加する
RUN apk add --no-cache --virtual g++ RUN apk add --no-cache libstdc++ && apk add --no-cache libgcc
g++ はc++のコンパイラ
libstdc++は標準 C++ のライブラリ、c++をコンパイル時に使用
libgccはラインタイムライブラリ
Node.jsはc++なんですね。
Dockerfile
FROM node:12.13.0-alpine as node FROM php:7.3-fpm-alpine RUN docker-php-ext-install pdo_mysql mysqli mbstring RUN apk add --no-cache --virtual g++ RUN apk add --no-cache libstdc++ && apk add --no-cache libgcc WORKDIR /var/www/html COPY --from=node /usr/local/bin/node /usr/local/bin/ COPY --from=node /usr/local/lib/node_modules/ /usr/local/lib/node_modules/ RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs \ && ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \ && ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npx
$ sudo docker exec -it ${containerId} sh
/var/www/html # php -v
PHP 7.3.15 (cli) (built: Feb 20 2020 23:51:19) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.15, Copyright (c) 1998-2018 Zend Technologies
/var/www/html # node -v
v12.13.0
/var/www/html # npm -v
6.12.0
うーん、結構きついね。