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

[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のプロセスが走っていない為、デプロイを行います。

maintenanceサーバの構築

環境

環境 Ver.
OS 4.9.32-15.41.amzn1.x86_64
Apache 2.4

▼以下は既に適宜設定/構築されているものとする。

  • EC2起動/基本設定
  • 静的メンテナンスファイルとCSS/JSは “/var/www/html” 配下に配置。
  • “_Health_Check.html”を配置。
  • サーバーの基本設定Apacheの基本設定等が設定済み。
  • ELB HealthCheckも適宜設定済み。
$ cd /var/www/html
$ tree
.
├── _Health_Check.html
├── maintenance.html
└── resources

コンテンツの権限/所有者の変更

$ chown -R apache:apache /var/www/html
$ cd /var/www/
$ find html -type f -exec chmod 0644 {} \;
$ find resources -type d -exec chmod 0755 {} \;

503リダイレクト設定

/etc/httpd/conf.d/maintenance.conf

ErrorDocument 503 /maintenance.html
Alias /maintenance.html /var/www/html/maintenance.html
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_URI} !^/resources/.*$
  RewriteCond %{REQUEST_URI} !^/maintenance.html$
  RewriteCond %{REQUEST_URI} !^/_Health_Check.html$
  RewriteRule ^.*$ /maintenance.html [R=503,L]
</IfModule>

サーバーへ反映する。

$ service httpd graceful