たくろぐ!

世界一のチラ裏

【メモです】docker周りのトラブルシューティング【sage】

E: Package パッケージ名 has no installation candidate

実際のエラー

E: Package 'libssl1.0-dev' has no installation candidate
ERROR: Service 'app' failed to build: The command '/bin/sh -c apt-get update &&     apt-get install -y sudo &&     apt-get install -y vim less &&     apt-get install -y build-essential libpq-dev libssl1.0-dev &&     gem install bundler &&     apt-get clean &&     rm -r /var/lib/apt/lists/*' returned a non-zero code: 100

修正前のソースコード

Dockerfile

RUN curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - && \
    apt-get install build-essential nodejs-dev node-gyp libssl1.0-dev && \ 
    apt-get install -y nodejs npm

修正後のソースコード

Dockerfile

RUN curl -sL https://deb.nodesource.com/setup_current.x | sudo -E bash - && \
sudo apt-get install -y nodejs

考察

sudo付ければいけたのでは?
そもそも libssl1.0-dev がいらないのでは?
また、そのパッケージのURL等がそろってない?

実際のエラー

ERROR: Service 'app' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder424722448/database.yml: no such file or directory

修正前のソースコード

アプリルートに database.rb がなかった

修正後のソースコード

以下のファイルを作成

database.rb

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  database: <%= ENV['APP_DATABASE'] %>
  username: <%= ENV['APP_DATABASE_USER'] %>
  password: <%= ENV['APP_DATABASE_PASSWORD'] %>

development:
  <<: *default
  host: mysql

test:
  <<: *default
  host: mysql

production:
  <<: *default
  host: mysql

qiita.com

実際のエラー

/usr/local/bundle/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/store.rb:83:in `binwrite': Permission denied @ rb_sysopen - /usr/local/src/tmp/cache/bootsnap-load-path-cache.10809.77364.tmp (Errno::EACCES)

修正前のソースコード

Dockerfile上での同期コマンド

COPY . $WORKSPACE

修正後のソースコード

上記をとる

実際のエラー

ERROR: Failed to remove image for service app: 409 Client Error: Conflict ("b'conflict: unable to remove repository reference "my/rails" (must force) - container 9049c1cdd125 is using its referenced image eb61c32b1392'")

修正前のソースコード

コマンドなので特になし

修正後のソースコード

docker images rm eb61c32b1392

自分でも何言ってるかわからない

実際のエラー

Can't initialize a new Rails application within the directory of another, please change to a non-Rails directory first.
Type 'rails' for help.
ERROR: Service 'app' failed to build: The command '/bin/sh -c bundle install &&     bundle exec rails new . --force --database=mysql &&     {         echo "gem 'therubyracer', platforms: :ruby";     } >> $WORKSPACE/Gemfile &&     bundle update' returned a non-zero code: 1

修正前のソースコード

Dockerfile

COPY --chown=dev:dev Gemfile $WORKSPACE/Gemfile
RUN bundle install && \
    bundle exec rails new . --force --database=mysql && \
    { \
        echo "gem 'therubyracer', platforms: :ruby"; \
    } >> $WORKSPACE/Gemfile && \
    bundle update
COPY --chown=dev:dev database.yml $WORKSPACE/config/database.yml

修正後のソースコード

Dockerfile

ADD Gemfile /myproject/Gemfile
ADD Gemfile.lock /myproject/Gemfile.lock

RUN gem install bundler
RUN bundle install

実際のエラー

rails aborted!
Mysql2::Error::ConnectionError: Unknown MySQL server host 'mysql' (-2)

修正前

docker run app rails db:migrate

修正後

docker-compose run app rails db:migrate

Macのローカルディレクトリの権限変更

やったこと

sudo chown -R $(whoami) /usr/local/bin

MacのローカルのMySQLの関連ディレクトリの削除

# コミュニティエディションを削除  
rm -rf ~/Library/PreferencePanes/My*
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /private/var/db/receipts/*mysql*
sudo rm /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
$ brew uninstall mysql

# 以前の不要なファイルも作する

sudo rm -rf /usr/local/Cellar/mysql*
sudo rm -rf /usr/local/bin/mysql*
sudo rm -rf /usr/local/var/mysql*
sudo rm -rf /usr/local/etc/my.cnf
sudo rm -rf /usr/local/share/mysql*
sudo rm -rf /usr/local/opt/mysql*
sudo rm -rf /etc/my.cnf

qiita.com

以下のコマンドを実行するとエラー。

.\build.ps1 isucon9-qualify .\isucon9-qualify

github.com

E: Release file for http://archive.ubuntu.com/ubuntu/dists/bionic-backports/InRelease is not valid yet (invalid for another 2d 0h 45min 22s). Updates for this repository will not be applied.

どうやらWSL2側のみ時間がずれている。

以下で対応する。

sudo apt install ntpdate
sudo ntpdate -sb time.nist.gov

github.com

WSL2のディストリでdockerコマンドが使えない

以下の項目をトグルONにする