Neo4jサーバーを実行するドッキング・イメージを作成しようとしていますが、初期アクセス時にパスワードを手動で設定する必要はありません。neo4jとパスワードを設定したDockerコンテナ
私はこのスクリプト
#!/bin/sh
set -e
# Start server
./bin/neo4j start
# Wait for it to start
while [ -z "$(grep 'Remote interface available' /var/lib/neo4j/logs/neo4j.log)" ]
do
echo Waiting for neo4j to start
sleep 1
done
# Set the password via REST
wget --header="Content-Type: application/json" \
--post-data='{"password": "newPassword"}' \
http://neo4j:[email protected]:7474/user/neo4j/password
# Shut down the server
./bin/neo4j stop
tail -f /var/lib/neo4j/logs/neo4j.log &
sleep 10
# EOF
スクリプトは、のNeo4jサーバを起動し、それが起動するのを待ち、その後、パスワードを設定するREST APIを使用して実行しますDockerfile
FROM neo4j:3.2
ADD setPassword.sh .
RUN ./setPassword.sh
としてこれを持っています。その後、サーバをシャットダウンし、メモリ内のすべてのものがディスクにフラッシュされるように、サーバがシャットダウンされるのを少し待つ。
スクリプトはエラーなしで実行されているように見え、新しい画像を作成できます。しかし、私が画像を実行してブラウザで接続すると、パスワードはまだneo4jです。
引数なしでwget
の出力を見てみると:
BusyBox v1.26.2 (2017-06-11 06:38:32 GMT) multi-call binary.
Usage: wget [-c|--continue] [--spider] [-q|--quiet] [-O|--output-document FILE]
[--header 'header: value'] [-Y|--proxy on/off] [-P DIR]
[-U|--user-agent AGENT] [-T SEC] URL...
Retrieve files via HTTP or FTP
--spider Spider mode - only check file existence
-c Continue retrieval of aborted transfer
-q Quiet
-P DIR Save to DIR (default .)
-T SEC Network read timeout is SEC seconds
-O FILE Save to FILE ('-' for stdout)
-U STR Use STR for User-Agent header
-Y on/off Use proxy
ベースイメージでwget
は、POSTリクエストを行うなど、ほとんどの標準的なwget
オプションは、サポートされていないように見えます。
私はまた、画像内の標準curl
をインストールする方法を見つけ出すことができなかった:
bash-4.3# apk add curl
WARNING: Ignoring APKINDEX.84815163.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.24d64ab1.tar.gz: No such filapk e or directory
ERROR: unsatisfiable constraints:
curl (missing):
required by: world[curl]
apk fetch
とask search
はtar.gz
ファイルが見つからないに関する同様のエラーを与えます。
REST APIを使用するための添付ファイルがありません:プログラムがデータベースにアクセスするときに自動的に作成してパスワードをリセットする必要はありません。
私は過去に問題を持っていたところ、ベース画像は、その変更を保持しているディレクトリにVOLUME
コマンドをしましたが、唯一の/data
がエクスポートされるようにそれが見え、それが表示されませんので、紛失Dockerfileで行われた変更承認情報を保持する。