質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.95%

docker環境でデータの保存ができません

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 99

score 0

docker環境でデータの保存ができません

phpでのアプリケーションシステムの改修をしています。
初心者ですが、見様見真似でなんとかdocker構築しました。

localhostでの挙動確認もできますし、ローカルのphpMyAdminも確認できます。

構築時(3か月くらい前)は、普通にローカルDBへの保存もできていましたが、
久しぶりに起動してみると、localhost環境でのDB保存ができない状態です。

例えば、記事投稿機能で投稿ができない。書類を提出する機能でエラーとなる。
単にDBに拒否されているように感じるのですが、システムエラーなどが出るわけでもなく
どこを確認するのかもわかりません。

dockerDesktopでのDELETEからのdocker-compose build --no-cache --force-rmコマンドなど
数回しています。
mysqlのdata内を削除して、再ビルドしたりもしましたが、状況はかわりません。

何か可能性として考えられることはあるでしょうか?
どうかお願い致します。

以下docker設定ファイル

version: "3.8"

services:
  php73-httpd:
    build: ./docker/php
    container_name: php73-httpd
    ports:
      - 80:80
    volumes:
      - ./:/var/www/html
    environment:
      TZ: "Asia/Tokyo"
    depends_on:
      - db

  db:
    build: ./docker/mysql
    container_name: db-host-database
    ports:
      - 3306:3306
    volumes:
      - ./docker/mysql/data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin-horenso-sket
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=db-host-database
      - PMA_USER=root
      - PMA_PASSWORD=secret
    links:
      - db
    ports:
      - 8080:80
    volumes:
      - /sessions

FROM mysql:8.0.19

ENV TZ='Asia/Tokyo' \
  MYSQL_DATABASE=database \
  MYSQL_USER=root \
  MYSQL_PASSWORD=secret \
  MYSQL_ROOT_PASSWORD=secret

COPY ./my.cnf /etc/my.cnf

FROM php:7.3-apache

# timezone environment
ENV TZ=UTC \
  # locale
  LANG=en_US.UTF-8 \
  LANGUAGE=en_US:en \
  LC_ALL=en_US.UTF-8

RUN apt-get update && \
  apt-get -y install git libicu-dev libonig-dev libzip-dev unzip locales && \
  apt-get clean && \
  rm -rf /var/lib/apt/lists/* && \
  locale-gen en_US.UTF-8 && \
  localedef -f UTF-8 -i en_US en_US.UTF-8 && \
  docker-php-ext-install intl pdo_mysql mysqli zip bcmath

RUN docker-php-ext-enable pdo_mysql

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer

# Add cake and composer command to system path
ENV PATH="${PATH}:/var/www/html/lib/Cake/Console"
ENV PATH="${PATH}:/var/www/html/app/Vendor/bin"

WORKDIR ./app
RUN mkdir -p \
    tmp/cache/models \
    tmp/cache/persistent \
  && chown -R :www-data \
    tmp \
  && chmod -R 770 \
    tmp

COPY ./php.ini /etc/php.ini
COPY ./apache/000-default.conf /etc/apache2/sites-available/000-default.conf

RUN usermod -u 1000 www-data
RUN groupmod -g 1000 www-data

RUN a2enmod rewrite \
  && service apache2 restart

docerのphpログ

特にエラーらしきものはわかりません、、、

172.26.0.1 - - [14/Jun/2021:11:42:06 +0900] "POST /board/entryWriting/?1623638442 HTTP/1.1" 500 989 "http://localhost/board/?tag=t90" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48"

172.26.0.1 - - [14/Jun/2021:11:42:14 +0900] "POST /board/getEntryList/?1623638450 HTTP/1.1" 200 515 "http://localhost/board/?tag=t90" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48"

172.26.0.1 - - [14/Jun/2021:11:42:21 +0900] "POST /board/getNewComment/?1623638457 HTTP/1.1" 200 515 "http://localhost/board/?tag=t90" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48"

172.26.0.1 - - [14/Jun/2021:11:42:28 +0900] "POST /board/updateEntryList/?1623638464 HTTP/1.1" 200 515 "http://localhost/board/?tag=t90" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48"

172.26.0.1 - - [14/Jun/2021:11:42:35 +0900] "POST /board/updateComment/?1623638471 HTTP/1.1" 200 515 "http://localhost/board/?tag=t90" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48"

172.26.0.1 - - [14/Jun/2021:11:42:42 +0900] "POST /consumer/getCheckData/?1623638478 HTTP/1.1" 200 291 "http://localhost/board/?tag=t90" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48"

var_dumpでのコンソール

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

errir.log

2021-06-14 03:25:01 Error: [PDOException] SQLSTATE[HY000]: General error: 1364 Field 'complete' doesn't have a default value
Request URL: /board/entryWriting/?1623641016=
Stack Trace:

database.php

class DATABASE_CONFIG {

        // default
        public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'db',
                'login' => 'root',
                'password' => 'secret',
                'database' => 'database',
                'prefix' => '',
                'encoding' => 'utf8',
        );
        // ローカル
        public $local = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'db',
                'login' => 'root',
                'password' => 'secret',
                'database' => 'database',
                'prefix' => '',
                'encoding' => 'utf8',
        );
        // 開発
        public $dev = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'root',
                'password' => '#####',
                'database' => 'database_dev',
                'prefix' => '',
                'encoding' => 'utf8',
        );
        // 本番
        public $pro = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'root',
                'password' => '######',
                'database' => 'database_pro',
                'prefix' => '',
                'encoding' => 'utf8',

AppModel.php

class AppModel extends Model {

    public function __construct($id = false, $table = null, $ds = null)
    {
        $env = (isset($_SERVER['CAKE_ENV']) ? $_SERVER['CAKE_ENV'] : 'local');
        if ($env !== 'default') {
            $this->useDbConfig = $env;
        }

        parent::__construct($id, $table, $ds);
    }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hope_mucci

    2021/06/11 16:38

    SELECTはできるがINSERTやUPDATEはできていないということでしょうか?
    まずはPHP側のログを確認しましょう。
    - phpコンテナのコンソールにエラーメッセージが出ていないか
    - 出ていない場合は、phpコード側でDB更新処理の前後で怪しそうな変数をvar_dumpで出力する
    でできたログで原因が特定できるならそれでヨシです。できない場合はログを質問本文に追記してください。コードもログもなければネット越しの我々は何も状況がわかりません。

    キャンセル

  • mikan0w022

    2021/06/14 12:02

    ありがとうございます!

    var_dumpするとサーバーエラーはでますが、具体的に内容がわかりません(><)
    既存のアプリケーションにdocker構築していて、そのアプリケーションに同じように構築しているはずなので、ソースはあまり関係ないと思います。
    なのでdockerの設定が悪いとは思うのですが、、、
    最近IPアドレスを変えましたが・・・関係ないですよね。。。

    キャンセル

回答 2

0

PHPのアプリケーション側にDBの設定は入っていますか?
見た感じPHP側で環境変数は設定されていないように見えるのですが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/06/14 12:04

    ありがとうございます!!

    アプリケーション側とは、どこを確認したらよろしいでしょうか?
    質問にdatabase.php追記いたします。

    他に確認する場所等あれば御指南お願いします(><)

    キャンセル

0

error.logの 
General error: 1364 Field 'complete' doesn't have a default value
が直接のサーバーエラーの原因では。
insert対象テーブルに completeというカラムはありませんか。おそらくDB側でdefault valueが設定されていない状態で値無指定のinsertをしようとしているのではないでしょうか。

エラーメッセージで検索したら対処法を載せているqiita記事が一番上に来ました。

https://qiita.com/seltzer/items/3096f0805440bfa19bff

記事の信ぴょう性はうーん?なので上記の内容でバッチリ解決するかどうか不明ですが、まずは記事通り試してみましょう。

※初回構築時と現時点でMySQLのバージョンを変えたりしてませんよね?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.95%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る