がべーじこれくしょん

技術系とかいろいろ

Cannot connect to the Docker daemon. の対処法

とある日、Docker上で走らせていたナレッジベースシステムが落ちていた。

「どうせだれか間違ってdockerのプロセスkillしたんだろwww」とか思ってdocker psしてみたところ以下のエラーが。

$ docker ps
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

どうやっても治らなかったので再インストールします。

再インストール手順

下準備

公式ドキュメントにアンインストールの方法も書いてあったのでこちらを参考にします。

docs.docker.com

どうやらdockerとかdocker-engineとか呼んでた時代はとうの昔のようで、古いパッケージを捨ててアップデートしてくれと書いてありました。(もしかしてコレが原因…?)

$ sudo apt-get remove docker docker-engine

ちなみに、dockerやdocker-engineを削除しても、作成したコンテナやイメージは消えないのでご心配なく。 (各ファイルは/var/lib/docker/に入ってるので、もし仮に全データを吹き飛ばしたいのであればこちらのディレクトリをrmしてください。)

特段の理由がない限りはlinux-image-extra-*ってパッケージ入れてね。これないとdockerがaufsっていうストレージドライバを使えないからさ。

って公式が言ってるので入れます。

$ sudo apt-get update

$ sudo apt-get install \
    linux-image-extra-$(uname -r) \
    linux-image-extra-virtual

さて、サクサク再インストールしていきましょう。

まずはaptコマンドがHTTPS経由でやり取りできるようにするパッケージを入れます。

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

次に、dockerの公式GPGキーを登録します。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

念のため、キーのfingerprintが以下のものであるか確認してください。(公式サイトで確認することをおすすめします。)

9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

$ sudo apt-key fingerprint 0EBFCD88

次に、dockerのリポジトリaptに追加します。

基本はamd64だと思いますが、Raspbian等を使っている方はarmhfの方を実行してください。

amd64:

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

armhf:

$ sudo add-apt-repository \
   "deb [arch=armhf] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

dockerのインストー

さて、ここからは安定版のdockerをインストールしていきます。

まず、パッケージのindexを更新しましょう。

$ sudo apt-get update

次に、dockerをインストールします。今回は、Community Editionをインストールするので、実際はdocker-ceというパッケージをインストールすることになります。

$ sudo apt-get install docker-ce

インストールが完了したら、以下のコマンドを実行してhello-worldイメージが正常に起動するか確認してください。

$ sudo docker run hello-world

これにて完了です。

dockerの更新手順

sudo apt-get updateを実行後、上記インストール手順を頭から繰り返せばいいらしいです。

詳しくは公式ドキュメントをご参照ください

docs.docker.com

RubyによるTwitterBot作成入門資料を書いた

サークルの新歓資料として一つ書いたのですが、新歓も終わったことですし晒しちゃいます(だが未完成である)

Rubyの環境構築については結構詳しく書いたつもりなので、環境構築ガイドにでも使ってください…

hackmd.io

最終的にマルコフ連鎖を用いてツイートを学習しながら自動でつぶやくところまで仕上げたいです(願望)

ActiveRecord::PendingMigrationError の倒し方

よくあります。

99.9%がモデルの変更に伴うマイグレーション忘れです。

作業を開始する前、pullしてきた直後、必ず以下のコマンドを実行しましょう。

$ rails db:migrate

docker-composeを使ってる場合のメモ。

$ docker-compose run web rails db:migrate

Rails with docker-composeで"A server is already running."と出る問題

docker-composeで、dbwebの切り分け運用している方は多いらしい。(僕は長いことvagrantだったのでよくわかりません)

友人のプロジェクトを手伝っているときに、docker-compose upwebが立ち上がらないことがあったのでメモ。

問題の概要

docker-compose upとすると、A server is already running.というエラーが発生し、webコンテナが正常に起動してくれない。

原因

これは、何かしらの要因によって、前回のプロセスが正常に終了しなかった場合に発生すると考えられます。

docker-composeは、実行プロセスのPIDを<project_dir>/tmp/pids/server.pidに書き込み、終了時に削除するという方法をとっています。

docker-composeは、コンテナを立ち上げる際、まずこのファイルを見に行った上で、実行中のプロセスを確認します。

そのため、何かしらの要因でこのserver.pidが削除されず残ってしまった場合、docker-composeはこれを実行中とみなしてしまいます。

対処法

諸悪の根源であるserver.pidを葬り去りましょう。

$ rm <project_dir>/tmp/pids/server.pid

PIDがわかる場合は、server.pidの中で該当するPIDを削除するだけで大丈夫です。

Rails with docker-composeで'/tmp/mysql.sock'がねえよと怒られたとき

この問題、よくあるみたいなのでメモ。

1. mysql.sockがあるかどうか疑う

mysql.sockについてですが、まれに自動で作成されない場合があるそうです。そのため、dbコンテナ上であらかじめ手動で作成してから再度試してみましょう。

$ sudo touch /var/lib/mysql/mysql.sock
$ sudo chown mysql:mysql /var/lib/mysql/mysql.sock

2. config/database.ymlの設定を疑う

そもそもソケットいらない?

docker-composeを用いてweb用とdb用のコンテナをそれぞれ分けて運用している場合、config/database.ymlhostdbとコンテナを明示する必要があります。(当たり前かもしれない…)

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password: password
  host: db
 
development:
  <<: *default
  database: myapp_development
 
test:
  <<: *default
  database: myapp_test

passwordの空欄を許可している場合は、passwordの値は空欄で構いません。

Macで使えるフリー回路図エディタ「Qt-BSch3V」を使ってみた

私の通っている学校の講義のなかで「実験」というものがありまして,それがまた厄介なんですよね(?)

そんな話はさておいて,今回は回路図をMacで書こうと思います.(というのも実験のレポートで回路図を用意する必要性が生じたからなのですが…)

いろいろ探した結果,「Qt-BSch3V」というものがよさそうなので使ってみます.

もともと,Win用の回路図エディタとして「BSch」というものがあるらしく,それのMac移植版ということらしいです.

使い方

ダウンロードとインストール

まずは,Vectorから「Qt-BSch3V」をダウンロードしてきます.

www.vector.co.jp

ダウンロードしてきたら,解凍してください.

解凍してできたフォルダをまるごとApplicationsフォルダに投げればインストール完了です.

起動とセットアップ

青色のBSchと書かれたアイコンがそれです.

起動すると,セキュリティの警告が出ると思いますが,お構いなく立ち上げましょう.

起動すると,以下のような画面になると思います.

f:id:musaprg:20170424013146p:plain

これが,エディタ画面です.

初期状態だと抵抗等のコンポーネントが読み込まれていませんので,コンポーネントをどこから読み込むかを指定してあげなければなりません.

メニューバーのSet→Libraryをクリックすると,Qt-BSch Set Libraryが立ち上がります.

f:id:musaprg:20170424013449p:plain

コンポーネントは,先程解凍してできたフォルダの中のLIBVというフォルダ内に入っています.

Addを押すと,選択画面が出るので,この中のライブラリファイルをすべて追加します.

以上でコンポーネントの追加は完了です.好きなだけ回路図をかきましょう!

(使い方については気が向いたら加筆します)

pip installしたはずなのにImport errorと言われた場合

環境

MacOSX 10.12.2 pyenv 20160629

方法

pip installしたモジュールをimportしようとしてImport Errorを吐かれたときは、$PYTHONPATHが正しく設定されているか確認しなければならないらしい。

pipでインストールしたモジュールのインストール先は、/usr/local/lib/python2.7/site-packages/であるのに対して、pyenvを使っている場合のパスは/Users/Hoge/.pyenv/shims/python/site-packages/になっている。これでは、pipでインストールしたモジュールが読み込まれないのもうなずける。

Pythonは、$PYTHONPATHという環境変数の中にあるパスを基本的には探索します。 そこで、$PYTHONPATHにこのpipで設定されているインストールパスを追加することで、正常に読み込まれるようになります。

$ export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages/

あとは、上記スクリプト.bashrcなり、.zshrcなりに追加することで解決です。