reponの勉強メモ

主に勉強したことのメモです。

ERROR: http://dl-cdn.alpinelinux.org/alpine/vx.xx/main: temporary error (try again later)の対応

dockerでビルドしたら、次のようなエラーが出た。

ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.11/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.70f61090.tar.gz: No such file or directory

バージョン番号などは変わるが、一旦出ると、このエラーが出続ける。

dockerを再起動したが、エラーは変わらず。

$ docker ps -a

してみると、

CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                       PORTS                    NAMES
2e0650c75024        446a65f7058a                  "/bin/sh -c 'apk upg…"   4 minutes ago       Exited (12) 4 minutes ago                             lucid_khayyam
b5a808c75de9        446a65f7058a                  "/bin/sh -c 'apk upg…"   5 minutes ago       Exited (12) 5 minutes ago                             unruffled_shannon
4b6e6b3ac667        446a65f7058a                  "/bin/sh -c 'apk upg…"   6 minutes ago       Exited (12) 6 minutes ago                             goofy_antonelli
85427430cf7f        446a65f7058a                  "/bin/sh -c 'apk upg…"   10 minutes ago      Exited (12) 10 minutes ago                            affectionate_saha
b0a3fdc23492        446a65f7058a                  "/bin/sh -c 'apk upg…"   11 minutes ago      Exited (12) 11 minutes ago                            vibrant_visvesvaraya
2b93884dcdde        446a65f7058a                  "/bin/sh -c 'apk upg…"   12 minutes ago      Exited (12) 12 minutes ago                            intelligent_lamarr
7de775293a70        446a65f7058a                  "/bin/sh -c 'apk upg…"   16 minutes ago      Exited (12) 16 minutes ago                            tender_hugle
ba7afe9872b2        446a65f7058a                  "/bin/sh -c 'apk upg…"   27 minutes ago      Exited (12) 27 minutes ago                            hopeful_shtern
34a9408d6171        446a65f7058a                  "/bin/sh -c 'apk upg…"   29 minutes ago      Exited (12) 29 minutes ago                            vigilant_stonebraker
...

status が Exited (12)のイメージを削除

$ docker rm `docker ps -a -q -f "exited=12"`

無事ビルドができるようになった。

参考

以下の解決策では、自分の環境では改善されなかったので、上記の方法を行った。

qiita.com

qiita.com

dockerコンテナ上のmariadbのバックアップとリストア

バックアップ

docker-compose を使っていて、docker-compose ps コマンドで確認できるコンテナの名前が db_1 だとすると、起動中のコンテナに対して

$ docker-compose exec db_1 mysqldump -u ユーザー名 -p -P ポート番号 -h ホスト(127.0.0.1) DB名 > DB名.dump_$(date +%Y%m%d%H%M%S).sql

で、日付時間をファイル名としたダンプファイルが生成される。パスワードを要求されるのでデータベースのパスワードを入力すること。

作成したら必ず ls -alh でサイズを見る。小さければ失敗している。エディタで開いて確認。

リストア

まずコンテナにダンプファイルをコピーする。

docker psコマンドで確認できるコンテナの名前がdb_1だとすると、起動中のコンテナに対して

docker cp ダンプファイル名 db_1:/

で、コンテナのルートディレクトリにコピーされる。

次に、コンテナに入ってリストア

$ docker-compose exec db_1 /bin/bash

% mysql -u ユーザー名 -p -D DB名 < ダンプファイル

docker上に作ったlaravelに環境変数を追加する際の手順

  1. .env ファイルに環境変数を、 環境変数名=環境変数 の形で追加

    ex: HOGE=HOGEHOGE::HOGE//HOGE

  2. docker-compose.yml の該当コンテナの environment に、環境変数名=${環境変数名} と追加。別名でも受けられるが混乱するので同一名にする。

    ex: HOGE=${HOGE}

  3. .env ファイルで設定した環境変数は必ず config/*.php で受ける。 config/*.php 以外の場所でのenv()での呼び出しは、設定ファイルがキャッシュされるとすべてNULLを返すため(ドキュメントー設定)

  4. たとえばconfig/hogehoge.php内で hogehoge = env('HOGE', default) と定義した場合には、`config('hogehoge')で呼び出せる。

javascriptの配列で重複を除く

const a = [1, 2, 2, 3, 3, 5, -1, "a"]
const uniq = Array.from(new Set(a));
または、
const uniq = [...new Set(a)];

配列からSetオブジェクトを作成し、再度配列に戻す。

Array.from() メソッドは、配列風オブジェクトや反復可能オブジェクトから配列を作る標準組み込み関数。

スプレッド構文 [... ]は反復可能オブジェクトから配列を作成するので、この場合はArray.from() メソッドと等価。

参考

qiita.com

qiita.com

developer.mozilla.org

2つの配列から重複した要素を抽出する

JavaScriptの配列操作に役立つ13のヒントとトリック - Qiita様より

const numOne = [0, 2, 4, 6, 8, 8];
const numTwo = [1, 2, 3, 4, 5, 6];

const firstValueSet = new Set( numOne ) ;
const duplicatedValues = numTwo.filter( item => firstValueSet.has(item) );

console.log(duplicatedValues); // [2, 4, 6]