Stronę tą wyświetlono już: 546 razy
W trakcie uruchamiania kontenera można do jego wnętrza przekazać parametry sterujące np. ustawieniami dostępu do bazy danych poprzez podanie nazwy użytkownika i hasła. I znów odniosę się do dokumentacji mongodb.com/compatibility/docker, gdzie można przeczytać:
To initialize your MongoDB with a root user, you can use the environment variables MONGO_INITDB_ROOT_USERNAME and MONGO_INITDB_ROOT_PASSWORD. These environment variables will create a user with root permissions with the specified user name and password. docker run --name mongodb -d -e MONGO_INITDB_ROOT_USERNAME=AzureDiamond -e MONGO_INITDB_ROOT_PASSWORD=hunter2 mongo
Jak nie trudno się domyślić opcja -e umożliwia ustawienie pojedynczej zmiennej środowiskowej w formacie:
W przypadku opisanym powyżej można określić dane dostępowe do bazy danych wewnątrz kontenera bazy danych. Jak jednak użyć te parametry wewnątrz serwera? Odpowiedź wymaga zmodyfikowania kodu w następujący sposób:
const connection = `mongodb://${ process.env.USER ? process.env.USER + ':' + process.env.PASSWORD + '@' : '' }mongodb:27017/wisches?authSource=admin`; mongoose.connect( connection,
W przypadku node dostępny jest obiekt globalny o nazwie process, który z kolei zawiera pole o nazwie env i to właśnie pole może zawierać kolejny obiekt z parametrami sterującymi.
Nie przynudzając już ani sekundy dłużej rozpocznijmy przebudowywanie obrazu serwera w tradycyjny ludowy sposób:
docker build -t node-api:1.0 .
Teraz uruchamiam instancję dla bazy danych:
docker run -d --network net-wishes --name mongodb --rm -v mongo-wishes:/data/db -e MONGO_INITDB_ROOT_USERNAME=AzureDiamond -e MONGO_INITDB_ROOT_PASSWORD=hunter2 mongo
by po chwili, lub co najwyżej dwóch oddać się szaleńczej rozkoszy uruchamiania serwera:
docker run -p 8889:8888 --name node -v "${pwd}:/app" --network net-wishes --rm -d -e USER=AzureDiamond -e PASSWORD=hunter2 node-api:1.0
Co sprytniejsze ludzie wolą sobie utworzyć skrypt .sh:
Po tej jakże nużącej czynności można się oddać niezmiernej przyjemności sprawdzenia np. Postman-em czy to w ogóle działa?!
I tu mała uwaga. Jeżeli uruchamiałeś instancję kontenera bazy danych MongoDb z opcją -v mongo-wishes:/data/db przed utworzeniem użytkownika, to niestety musisz się pożegnać z tym volume-nem. Dzieje się tak dlatego, że dane starej bazy danych są kopiowane i nadpisują ustawienia użytkownika. Jeżeli wywalisz ten volume-n wszystko zacznie działać ponownie.