docker.exe: Error response from daemon: oci runtime error: container_linux.go:265: starting container process caused "exec: \"-p\": executable file not found in $PATH".

dockerをいじってて腹がたったので書きます。

環境:windows 10

現象

Dockerfileには

FROM node:latest

とだけ書いて、buildしました。

> docker build -t hoge .

runは

> docker run -it --rm --name hoge-app  hoge -p 5000:5000 /bin/bash

そしたら、

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: oci runtime error: container_linux.go:265: starting container process caused "exec: \"-p\": executable file not found in $PATH".

と返されました。
ググってみたら、権限の問題だよとかいろいろ書いてあったんですけど、よくわからなくて諦めていました。

修正

> docker run -it --rm -p 5000:5000 --name hoge-app  hoge /bin/bash

にしたらちゃんと動いてくれました。
引数の順番が大事なんですね...
勉強します....

Raspberry Piでdockerを動かしたらstandard_init_linux.go:178: exec user process caused "exec format error"と言われる

問題

Raspberry Pi上でdocker buildしたら

standard_init_linux.go:178: exec user process caused "exec format error"
The command '/bin/sh hogehugapiyo' returned a non-zero code: 1

と言われる

原因

Raspberry PiカーネルはARMなのでWindowsMacのdocker imageをそのまま使うことができないから

解決策

ARM用にする。 rpi- から始まるimageを元に作れば良さそう

botをdockerを使って作ってみようとwindowsでしていて、自宅のRaspberry Piでホストさせようとして、このページを参考にしながらdockerをインストール

buildで上記のエラーを吐いて、1時間以上悩んでようやく原因が分かった

botを動かす環境でdockerが直接動くんじゃなかったら使うメリットないよな…. dockerの仕様上、仕方ないんだけどさ….

参考

github.com stackoverflow.com dr-asa.hatenablog.com dev.classmethod.jp

研究室に誰がいるかをslackから確認するシステムを作った

作ったもの


概要

  • 10分に1回ラズパイからローカルipに向かってpingし、arpMacアドレスを取得してユーザーを特定しデータベースに登録を行う。

f:id:matatsuna:20170417120424p:plain
f:id:matatsuna:20170417120429p:plain

  • slackのスラッシュコマンドでデータベースから最新の情報を取ってきて返す。

f:id:matatsuna:20170417120008p:plain
f:id:matatsuna:20170417120014p:plain

使ったもの

ハードウェア
ソフトウェア

技術的なこと

raspberry pi

10分間に1回プログラムを実行する

cronを使いました。
クーロン(cron)をさわってみるお - Qiita

arpコマンドでMacアドレスを取得する

まず、Macアドレスは端末が必ず持っていてほぼユニークなアドレスで同じネットワーク内の端末からは、ipアドレスと一緒に知ることができます。Wifiにつながってる状態であれば、ロック画面やスリープに入ったとしても知ることができます。arpテーブルというipアドレスMacアドレスの一覧の表が存在しarpコマンドで参照します。

$ arp

ただ、リアルタイムでarpテーブルを更新するためには、pingを飛ばす必要があります。

$ sudo ping -c 1 -W 1 192.168.xxx.xxx
$ arp -a 192.168.xxx.xxx

これを10分に1回100ipほどに行い、同じネットワーク内にある端末のMacアドレスを取得します。
ネットワークに負荷がかかるので、本当はこんなことしたくない....

hoge.localにアクセスすると登録できるようにする

Raspberry Piにホスト名の設定をしたメモ – 1ft-seabass.jp.MEMO
この設定を行い、index.phpを/var/www/html/に配置して登録フォームを設けました。
なお、ブラウザからhoge.localでアクセスできるのはMac,iOSのみで、windowsAndroidはip直打ちです。

slack 側

スラッシュコマンドを作る

f:id:matatsuna:20170415183405p:plain
これじつは作れます。https://ほげふが.slack.com/apps/manage/custom-integrations
しかも仕組みは簡単で、

 /コマンド名 引数 

この引数をそのままテキストでGETかPOSTを好きなアドレスに対して送ることができます。httpのサイトへも可能です。jsonで返してあげると結果をslackに投稿してくれます。
Slash Commands | Slack
データベースの最新情報を返すだけのphpにスラッシュコマンドからリクエストを送るようにしました。

まとめ

研究室にいることをわざわざカードをかざしたり、カメラを設置して監視するのは、なんか嫌だなーって思っていて、普段通りの生活を送ってる中でなにかトラックングできないか考えたらこの方法を思いつきました。さり気なく監視してる感が余計に怖いですが。
10分間に1回ごとの情報がデータベースに貯まるので、研究室に来てない人がわかったりするので、M1,B4の先輩たちからすごく嫌がられましたw