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

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

ただいまの
回答率

87.49%

【Docker】MySQL8.0にしたらログがターミナルに出力されなくなった

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 471

score 13

実現したいこと前提

デバッグを行いたくて、binding.pryをしたいのですが、そもそもログが表示されないというか、

docker-compose up 

を実行したら

db_1               | 2021-06-06T14:40:20.431104Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
db_1               | 2021-06-06T14:40:20.436585Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
db_1               | 2021-06-06T14:40:20.585465Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.21'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
web_1              | => Booting Puma
web_1              | => Rails 6.1.3.1 application starting in development 
web_1              | => Run `bin/rails server --help` for more startup options
web_1              | Puma starting in single mode...
web_1              | * Version 3.12.6 (ruby 2.6.5-p114), codename: Llamas in Pajamas
web_1              | * Min threads: 5, max threads: 5
web_1              | * Environment: development
web_1              | * Listening on tcp://0.0.0.0:3000
web_1              | Use Ctrl-C to stop

表示がここまでで、そこからいくらlocalhost:3000で色々な操作をしても
操作ログがターミナルに出力されませんでした。

MySQL5.7コンテナを用いてた頃はしっかりと操作ログが出力されていましたが、8.0に変えたら

https://selfnote.work/20210315/programming/mysql-docker-error-mbind/
このような問題が発生したので、この記事のように対処したらうまくいきましたが、
mbind: Operation not permitted
の表示が消えるのみで、操作ログが出力されません

【追記】この記事を参考にして
https://qiita.com/hb5kz/items/7c9d266480079910de5c
デタッチドモードで起動して、
docker attach coffee_passport_web_1 
を入力しても反応なしで、何も出力されません
エンター押しても出力されませんでした。

またこの記事を

該当のソースコード

docker-compose.yml

version: '3'
services:
  db:
    image: mysql:8.0.21
    cap_add:
      - SYS_NICE
      # コンテナにLinux機能を追加するオプションのようです。SYS_NICEは、プロセスの優先度(nice値)をあげます。
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_HOST: db
    ports:
      - '3306:3306'
    volumes:
      - mysql-data:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password # 認証方式を8系以前のものにする
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    stdin_open: true 
    tty: true
    # この2文を追加でコンテナ内の標準入出力をローカルマシンのターミナルにアタッチする準備が整います。
    volumes:
      - .:/coffee_passport
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      RAILS_MASTER_KEY: ${RAILS_MASTER_KEY}
      SENDGRID_API_KEY: ${SENDGRID_API_KEY}
      ADMIN_USER_PASSWORD: ${ADMIN_USER_PASSWORD}
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
      GOOGLE_USER_NAME: ${GOOGLE_USER_NAME}
      GOOGLE_PASSWORD: ${GOOGLE_PASSWORD}
      SENDGRID_USER_NAME: ${SENDGRID_USER_NAME}
      SENDGRID_PASSWORD: ${SENDGRID_PASSWORD}
      PAYJP_SECRET_KEY: ${PAYJP_SECRET_KEY}
      PAYJP_PUBLIC_KEY: ${PAYJP_PUBLIC_KEY}
      MYSQL_HOST: db
# selenium_chrome を使うために以下の行を追加
      SELENIUM_DRIVER_URL: http://selenium_chrome:4444/wd/hub"
  selenium_chrome:
    image: selenium/standalone-chrome-debug
    logging:
      driver: none
volumes:
  mysql-data:
    driver: local
  vendor_bundle:
    driver: local

8.0で環境構築してる人たちはみんなこのようなコードでした

Dockerfile

FROM ruby:2.6.5

## nodejsとyarnはwebpackをインストールする際に必要
# yarnパッケージ管理ツールをインストール

RUN curl http://deb.debian.org/debian/dists/buster/main/binary-amd64/by-hash/SHA256/935deda18d5bdc25fb1813d0ec99b6e0e32a084b203e518af0cf7dc79ee8ebda | head

RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && apt-get install -y yarn

# chromeの追加
RUN apt-get update && apt-get install -y unzip && \
    CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
    wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \
    unzip ~/chromedriver_linux64.zip -d ~/ && \
    rm ~/chromedriver_linux64.zip && \
    chown root:root ~/chromedriver && \
    chmod 755 ~/chromedriver && \
    mv ~/chromedriver /usr/bin/chromedriver && \
    sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \
    sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
    apt-get update && apt-get install -y google-chrome-stable

RUN /bin/sh -c /bin/sh -c bundle update --bundler
RUN gem install bundler:2.1.4

RUN mkdir /coffee_passport
WORKDIR /coffee_passport
COPY Gemfile /coffee_passport/Gemfile
COPY Gemfile.lock /coffee_passport/Gemfile.lock
RUN bundle update rails
RUN bundle update
RUN bundle update mimemagic
RUN bundle update capybara selenium-webdriver
#RUN bundle update nokogiri marcel mimemagic
RUN bundle install

COPY . /coffee_passport

RUN yarn install --check-files
RUN bundle exec rails webpacker:compile

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

試したこと

config/environments/development.rb

  config.logger = Logger.new(STDOUT)

を記述し、

docker-compose downの後にupし直しても
操作ログは出力されず。

docker inspect   coffee_passport_db_1

を出力し

      "Volumes": {
                "/var/lib/mysql": {}
            },

このようなvolumeの表示が見られたのですが、もしかしたら本来はこのような表示にならない可能性もあるかもしれません。

docker exec coffee_passport_web_1 bash
でコンテナの中に入って
development.logを見たら、しっかりと操作ログが記録されていました。

サーバーエラーログ
サーバーコンテナを使用して MySQL Server を初めて起動したときに、次のいずれかの条件に該当する場合、server error log は生成されません:

  • ホストからのサーバー構成ファイルがマウントされていますが、ファイルにシステム変数 log_error が含まれていません (サーバー構成ファイルのバインドおよびマウントに関する データおよび構成の変更の永続化 を参照)。


  • ホストからのサーバー構成ファイルはマウントされていませんが、Docker 環境変数 MYSQL_LOG_CONSOLE は true (MySQL 8.0 サーバーコンテナの変数のデフォルト状態) です。 その後、MySQL Server エラーログは stderr にリダイレクトされるため、エラーログは Docker コンテナログに記録され、docker logs mysqld-container コマンドを使用して表示できます。
 いずれかの条件に該当する場合に MySQL Server でエラーログを生成するには、configure the server の --log-error オプションを使用して、コンテナ内の特定の場所にエラーログを生成します。 エラーログを永続化するには、データおよび構成の変更の永続化 の説明に従って、コンテナ内のエラーログの場所にホストファイルをマウントします。 ただし、コンテナ内の MySQL Server に、マウントされたホストファイルへの書込みアクセス権があることを確認する必要があります。

と言った記事を見つけました。が具体的にどうすれば良いのかわかりませんでした。

docker logs -f coffee_passport_web_1
と入力しても、当然
web_1              | Use Ctrl-C to stop
までしか出力されません。

volumeの設定が間違ってると思うのですが、どのように設定すれば良いか分かりません。
ご教授いただければ幸いです。

環境

macOS,ruby 2.6.5p114 ,Rails 6.1.3.1,Docker version 20.10.5,

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

check解決した方法

0

https://qiita.com/divclass123/items/9767c4bd8315a4c7941e

こちらに詳しく書きました。
お手数ですがご確認いただければ幸いです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

解決されたい問題は「docker-compose up」や「docker-compose logs」コマンドの実行時、「web」アプリケーションにアクセスした時のログを見たい、ということですね。ここで表示されるのは、各コンテナ(で実行しているアプリケーションなどのプロセス)の標準出力です。

development.logを見たら、しっかりと操作ログが記録されていました。 

とありますので、現在の設定では、この「development.log」にログが記録される設定になっているようです。

そのため、標準出力にはログが出ておらず、
「docker-compose up」や「docker-compose logs」では出ていないように見える、という状況です。

Rails は疎く詳しくないのですが、config.logger = Logger.new(STDOUT) (ログを標準出力に記録する)の記述は、おそらくコンテナの中のプロセスには反映されていないようです。

たとえば、まったく別のディレクトリを作成し、そこで再度 config.logger の記述を追加した状態で「docker-compose up」を実行すると、標準出力にログが見えるのではないでしょうか。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2021/06/12 20:29

    御回答ありがとうございます。

    どの設定が問題でターミナルにrails sみたいなログが出力されてるか分からないので、
    もう一度調べて、やってみます。

    キャンセル

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

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

関連した質問

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