Edited at

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