laravel
docker
LaraDock

laradockで環境構築時にハマった点

docker-compose up -d nginx mysqlでnginxとmysqlのサービスを起動しようとしたが、workspceとnginxだけが起動しなかった。

$ docker-compose ps -a
           Name                          Command               State                  Ports
---------------------------------------------------------------------------------------------------------
laradock_beanstalkd_1         /usr/bin/beanstalkd              Up       0.0.0.0:11300->11300/tcp
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up       2375/tcp
laradock_mysql_1              docker-entrypoint.sh mysqld      Up       0.0.0.0:3307->3306/tcp, 33060/tcp
laradock_nginx_1              /bin/bash /opt/startup.sh        Exit 2
laradock_php-fpm_1            docker-php-entrypoint php-fpm    Up       9000/tcp
laradock_redis_1              docker-entrypoint.sh redis ...   Up       0.0.0.0:6379->6379/tcp
laradock_workspace_1          /sbin/my_init                    Exit 1

workspaceのエラー

docker-compose workspace logsを実行し、ログを確認
以下のエラーが出ていた。

workspace_1            | Traceback (most recent call last):
workspace_1            |   File "/sbin/my_init", line 417, in <module>
workspace_1            |     main(args)
workspace_1            |   File "/sbin/my_init", line 333, in main
workspace_1            |     import_envvars(False, False)
workspace_1            |   File "/sbin/my_init", line 90, in import_envvars
workspace_1            |     for envfile in listdir("/etc/container_environment"):
workspace_1            |   File "/sbin/my_init", line 74, in listdir
workspace_1            |     return sorted(os.listdir(path))
workspace_1            | PermissionError: [Errno 13] Permission denied: '/etc/container_environment'

エラーをググったところ同じエラーで躓いている人を発見。
https://github.com/laradock/laradock/issues/1889

実行ユーザの権限の問題らしい。
workspaceのDockerfileを以下のように編集。

# Clean up
RUN apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
    rm /var/log/lastlog /var/log/faillog

-USER laradock
+USER root

# Set default work directory
WORKDIR /var/www

nginxのエラー

docker-compose nginx logsを実行し、ログを確認
以下のエラーが出ていた。

nginx_1                | /opt/startup.sh: line 2: $'\r': command not found
nginx_1                | /opt/startup.sh: line 10: syntax error: unexpected end of file

エラーをググったところまたまた同じエラーで躓いている人を発見。
https://github.com/laradock/laradock/issues/1878

「startup.sh」の改行コードをLFにする必要があるとのこと。自分のPCでは標準でCRLFになっていた。
「startup.sh」をサクラエディタなどで開き、以下の条件で置換。
置換前 \r\n
置換後 \n

docker-compose up --build nginxで再度ビルド。

ビルド後、docker-compose up -d nginx mysqlでサービスを起動。

エラーなく起動していることが確認できる。

$ docker-compose ps -a
           Name                          Command               State                    Ports
---------------------------------------------------------------------------------------------------------------
laradock_beanstalkd_1         /usr/bin/beanstalkd              Up      0.0.0.0:11300->11300/tcp
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up      2375/tcp
laradock_mysql_1              docker-entrypoint.sh mysqld      Up      0.0.0.0:3307->3306/tcp, 33060/tcp
laradock_nginx_1              /bin/bash /opt/startup.sh        Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_php-fpm_1            docker-php-entrypoint php-fpm    Up      9000/tcp
laradock_redis_1              docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp
laradock_workspace_1          /sbin/my_init                    Up      0.0.0.0:2222->22/tcp