ERROR: for xxx Cannot start service xxx: driver failed programming external connectivity on endpoint (): Bind for 0.0.0.0:80 failed: port is already allocated

ローカル上で docker-compose stop -> docker-compose rm -f
ネットワークキャッシュを消さないと、接続プロセスが残る。

$ docker-compose up -d
ERROR: for xxx  Cannot start service xxx: driver failed programming external connectivity on endpoint (): Bind for 0.0.0.0:80 failed: port is already allocated
$ lsof -i -P | grep "LISTEN"
Box\x20Lo   476 xxx    5u  IPv4 0xdb0169c9ab3e7445      0t0  TCP localhost:17223 (LISTEN)
Box\x20Lo   476 xxx    6u  IPv6 0xdb0169c9ac255215      0t0  TCP localhost:17223 (LISTEN)
BetterTou 20148 xxx   11u  IPv4 0xdb0169c9ce631d3d      0t0  TCP *:62053 (LISTEN)
BetterTou 20148 xxx   12u  IPv6 0xdb0169c9ac254795      0t0  TCP *:62053 (LISTEN)
RoyalTSX  78179 xxx   16u  IPv4 0xdb0169c9d3c77445      0t0  TCP localhost:54890 (LISTEN)
vpnkit    79289 xxx   27u  IPv4 0xdb0169c9cf03c445      0t0  TCP *:80 (LISTEN) # このプロセス

Mac の Docker ホスト上へ screen コマンドにて tty 経由で接続を行い、直接削除する。

$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
$ docker stop $(docker ps -a -q)
$ docker rm $(docker ps -a -q)
ctrl-a, ctrl-k の後に y
lsof -i -P | grep "LISTEN"
Box\x20Lo   476 xxx    5u  IPv4 0xdb0169c9ab3e7445      0t0  TCP localhost:17223 (LISTEN)
Box\x20Lo   476 xxx    6u  IPv6 0xdb0169c9ac255215      0t0  TCP localhost:17223 (LISTEN)
BetterTou 20663 xxx   11u  IPv4 0xdb0169c9cc1e6f2d      0t0  TCP *:62053 (LISTEN)
BetterTou 20663 xxx   12u  IPv6 0xdb0169c9ac254795      0t0  TCP *:62053 (LISTEN)

これで up できるようになる。

$ docker-compose up -d

今週の振り返り

睡眠不足への対策

どうしても睡眠時間が確保できない日が多いので、日中眠くなってしまう。
昼飯を取らない、取っても夕方頃にすれば、集中力をそれなりに維持できることが分かった。

また、寝る時もズボン下履いて厚着することによって、寒気が無くなりより短い時間で熟睡出来るようになった。

通勤時間の学習

席に座れないことも多いため、事前に不明点を電車に乗っている時に調査してしまい、スマホにまとめて頭を整理しておくようにした。

座れる時は熟睡する。始発でも席が空いていないのにはかなり驚いた。

1日のアウトプット量

を振り返るようにする、改めて。進まない時の対策を都度取れるように。。

[Jenkins] 2.85以降のバージョンにおけるプロトコルエラー

環境

環境 Ver.
Jenkins 2.74->2.86へ更新

エラー

https://jenkins.io/security/advisory/2017-10-11/
上記セキュリティリスクが報告された為、2.74から2.86へバージョンを更新した。

This Jenkins instance uses deprecated protocols: JNLP-connect,JNLP2-connect. It may impact stability of the instance. If newer protocol versions are supported by all system components (agents, CLI and other clients), it is highly recommended to disable the deprecated protocols.

このJenkinsでは、廃止予定のプロトコル “JNLP-connect”、”JNLP2-connect”を使用している。
新しいプロトコルのバージョンがシステム構成要素(エージェント、CLI等)でサポートされている場合、インスタンスの安定性に影響する可能性がある為、廃止予定のプロトコルを無効にすることを推奨する。

2.85以降のバージョンで発生するようだ。

対処方法

http://{YOUR_DOMAIN}/configureSecurity/ のページにて、”Agent Protocols” のチェックを全てはずし、廃止予定のプロトコルを全て無効にする。

[Shell Script] DBであるプロセスが走っている場合、デプロイ等の処理を中断させる

./process-check.sh

#!/bin/bash
set -Ceu

# Confirm Foo process
CONF_PROCESS=`mysql --defaults-extra-file=./.access-db.conf -h test.ap-northeast-1.rds.amazonaws.com -Be 'show processlist;' | grep foo | wc -l`
echo "fooのプロセス数は ${CONF_PROCESS} です。"

if [ ! ${CONF_PROCESS} -eq 0 ]; then
    echo 'fooのprocessが走っている為、デプロイを中断します。'
    exit 1
fi
    echo 'fooのプロセスが走っていない為、デプロイを行います。'

...{デプロイ処理}...

./.access-db.conf

[client]
user     = "{DB_USER_NAME}"
password = "{DB_USER_PASS}"

権限を変更する。

chmod 0600 ./.access-db.conf

実行する。

$ sh process-check.sh
fooのプロセス数は        0 です。
fooのプロセスが走っていない為、デプロイを行います。