Help us understand the problem. What is going on with this article?

laradockを公式通りにしたら詰まったお話

More than 3 years have passed since last update.

Dockerを使って以下の環境を作る

laravelにてPHP5.5環境を公式通りに作る際

chdir to cwd (\"/var/www/html\") set in config.json failed: no such file or directory

などのエラーが解消できずあれこれ詰まったので、その救済措置をここに記載します。

導入方法も兼ねて記載しているので
エラー解消までスキップしたい方は

まで飛ばしてください

追記)7/9
解消しました。
どうやらphp-fpmのworkdirの設定を変えてあげなければならないようでした

当方の環境

  • macOS Sierra

以下の環境を作る

  • CentOS 7系
  • Apache 2.4
  • PHP 5.6
  • MySQL 5.5
  • Laravel 5

Dockerをインストール

dockerのホームページにアクセス
https://docs.docker.com/docker-for-mac/
Get Docker for Mac (Stable)からダウンロードしてください

laradockの準備(workspace)

laradock : https://github.com/laradock/laradock

公式通りの手順で行いたいと思います。

作業領域を作る

$ mkdir laravel
$ cd laravel

laradockをクローンする

$ git clone https://github.com/Laradock/laradock.git
$ cd laradock

.envファイルを用意する

$ cp env-example .env

.envファイルに追加する

vim .env

.env
#一番最後の行
DB_HOST=mysql

workspaceをcomposeする

$ docker-compose up -d workspace

お時間かかるので少々コーヒーでも飲んで待ちましょう

workspaceの中へ入る

$ docker-compose ps
         Name                Command      State           Ports
-----------------------------------------------------------------------
laradock_applications_1   /true           Exit 0
laradock_workspace_1      /sbin/my_init   Up       0.0.0.0:2222->22/tcp

$ docker exec -it laradock_workspace_1 /bin/bash

※project_nameはお好きなもので

root@{コンテナID}/var/www#
$ composer create-project laravel/laravel project_name

... お時間かかります ...

$ exit

共有パスの設定をする

vim docker-compose.yml

docker-compose.yml
10:- - ${APPLICATION}:/var/www
10:+ - ${APPLICATION}project_name:/var/www

laradock準備(その他)

mysqlの設定を変更する

vim mysql/Dockerfile

Dockerfile
1:- FROM mysql:8.0
1:+ FROM mysql:5.5

apacheの設定を変更する

vim .env

.env
84:- APACHE_HOST_HTTP_PORT=80
84:+ APACHE_HOST_HTTP_PORT=8008

ここで8008にしたのはポートが重複しないようにするため

vim apache2/Dockerfile

1:- FROM webdevops/apache:ubuntu-16.04
1:+ FROM webdevops/apache:centos-7

centOS7に変更する

composeする

$ docker-compose up -d mysql apache2 php-fpm

🚨Emergency🚨

ここまで公式通りにやると下記のようなエラーが出ます。

ERROR: for php-fpm  Cannot start service php-fpm: oci runtime error: container_linux.go:247: starting container process caused "chdir to cwd (\"/var/www/html\") set in config.json failed: no such file or directory"
ERROR: Encountered errors while bringing up the project.

うーん…。

ubuntuでは/var/www/publicであるのに対して
centosでは/var/www/htmlなのか…?
とりあえず一旦救済措置として

$ cd ../project_name
$ mkdir html
$ cp -rf public/* html/
$ docker-compose up -d apache2

http://localhost:8008

スクリーンショット 2017-07-08 23.50.29.png

おお…。行けた。

各バージョン確認

centOS
$ docker-compose ps "apache2"
       Name                     Command               State                      Ports
---------------------------------------------------------------------------------------------------------
laradock_apache2_1   /opt/docker/bin/entrypoint ...   Up      0.0.0.0:4438->443/tcp, 0.0.0.0:8008->80/tcp

$ docker exec -it laradock_apache2_1 /bin/bash

[root@{コンテナID} public]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
apache
$ docker-compose ps "apache2"
       Name                     Command               State                      Ports
---------------------------------------------------------------------------------------------------------
laradock_apache2_1   /opt/docker/bin/entrypoint ...   Up      0.0.0.0:4438->443/tcp, 0.0.0.0:8008->80/tcp

$ docker exec -it laradock_apache2_1 /bin/bash

[root@{コンテナID} public]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Apr 12 2017 21:03:28
mysql
$ docker images "mysql"
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.5                 7896f0417528        2 weeks ago         262MB 
php-fpm
$ docker-compose ps "php-fpm"
       Name                     Command              State    Ports
---------------------------------------------------------------------
laradock_php-fpm_1   docker-php-entrypoint php-fpm   Up      9000/tcp

$ docker exec -it laradock_php-fpm_1 /bin/bash

root@{コンテナID}:/var/www# php -v
PHP 5.6.30 (cli) (built: Mar 21 2017 23:05:12)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

最後に

これはあくまで救済措置であって
スマートなやり方ではありません。

publicをhtmlにしてしまうとapache上で
とてつもないエラーを吐き出してしまいます
なので現状publicとhtmlが2つ無いとダメな
おかしな状況になっております。

apache内のhttpd.confには
DocumentRoot /var/www/public/
と記載されており
publicになっているはずなのに…と頭を悩ませています。

考察としては
fpmのせいなのか…?
とも思ったりしています。

原因がわかり次第記述を変えていこうと思います。

07/9追記 解消

一旦Remove all dataをし

apache2内のDockerfile 13行目にある

apache2/Dockerfile
13:- WORKDIR /var/www/public/
13:+ WORKDIR /var/www/

php-fpm内のDockerfile-56 274行目にある

php-fpm/Dockerfile-56
274:- WORKDIR /var/www
274:+ WORKDIR /var/www/public

にする事で直りました。

apacheの方はいじらなくてもいいと思いますが
php-fpmの方はこのように明示してあげないと
centosのデフォルトパスを指定してしまうようです。

またapache2のコンテナに入りhttpd.confの中の
DocumentRootを変更するとpublicでいけるようです

k-waragai
欲しい物は自ら作り、不便なら自ら改善せよ
crowdworks
21世紀の新しいワークスタイルを提供する日本最大級のクラウドソーシング「クラウドワークス」のエンジニアチームです!
https://crowdworks.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away