2016-10-18 31 views
6

ile Mongo kapsayıcı oluşturmak: Bu mükemmel çalışıyorliman işçisi-oluşturma Bir Mongo konteyner oluştur'da içinde oluşturulan sahip kullanıcı adı ve şifre

version: '2' 
volumes: 
    mongodata: 
    driver: local 
services: 
    mongo: 
    image: mongo:latest 
    hostname: ${MONGODB_HOST} 
    restart: always 
    ports: 
     - "27017:27017" 
    volumes: 
     - mongodata:/data/db 

Ancak şimdi veritabanı üzerinde bir şifre koymak istiyorum. Bunu yapmak için öncelikle anladığım kadarıyla veritabanı oluşturmalı, parola eklemeli ve ardından --auth bayrağından yeniden başlatmalıyım. Sorum, docker-compose ile bu işlemi nasıl yapılacağıdır.

Docker-compose olmadan her şeyi yaparsam bunu yapabilirim. Oluşturma ile ortaya çıkabilecek sorunlar şunlardır:

a) docker-compose bir docker ağının içinde çalışır. b) docker-compose, üretim sırasında olduğu gibi başlangıçta farklı komutlar çalıştıramaz. - Bu önemlidir çünkü bazı insanlar başlangıçta --auth'u çalıştırabileceğinizi ve ilk kez bir şifre belirlemenize izin vereceğini söylese de, bu durum böyle görünmüyor. ,

# start the temporary container 
docker run -d -v /tmp/mongodb --name tmpdb -e MONGODB_DBNAME=db_test mongo --auth 
# do the user creation 
docker run -it --link tmpdb --rm mongo sh -c 'mongo --host tmpdb --eval "db.createUser({ user: \"admin\", pwd: \"password\", roles: [ { role: \"root\", db: \"admin\" } ] });"' 
# stop the server 
docker stop tmpdb 
# create new mongodb container, using the old ones data 
docker run -d -p 27017:27017 --name mongo2 -e MONGODB_DBNAME=db_test mongo --auth 
# clean up old container (we are using the volumes so they will stick around) 
docker rm tmpdb 

Bu dosya, geçici bir kabı oluşturur üzerinde bir kullanıcı adı/parola ayarlar: Ben çalışmaya başladı

bir çözüm ben liman işçisi-oluşturma dosyasını çalıştırmadan önce tüm sunucularda aday olacağını bir kabuk oldu Özgün kabı durdurur, eskileri hacim kabını kullanarak yeni bir tane oluşturur ve orijinali siler. Yeni mongo konteynerinin artık bir şifresi var.

Sonuç olarak benim bu soru, docker-compose'da bunu yapmanın en iyi yolu nedir? Benim liman işçisi-oluşturma dosyasında

Benim diğer kaplar bu yüzden Mongo verilerini tutan hacimli konteyner liman işçisi-oluşturma

cevap

1

Mongo yaratan aynı ağda olması gerektiğini düşünüyorum mongo erişebilir gerekir: Yazım sırasındaki en son görüntü (v 3.5), iki ortam değişkenini, MONGO_INITDB_ROOT_USERNAME ve MONGO_INITDB_ROOT_PASSWORD kabul eder.

Bunlar ayarlandığında, içeriğin giriş noktası komut dosyası, mongod hizmetini --auth ile başlatır, ardından sağlanan kimlik bilgilerini içeren bir yönetici kullanıcı oluşturur.

Bu

şu anda onların README belgelenmiştir, ancak bu konuda bir GitHub issue izleme ilerleme var ve kaynak docker-entrypoint.sh komut satırında 104 mevcuttur.

version: '3' 
services: 
    mongodb: 
    image: mongo:3.5 
    hostname: ${MONGODB_HOST} 
    environment: 
     - MONGO_INITDB_ROOT_USERNAME=alice 
     - MONGO_INITDB_ROOT_PASSWORD=super-secret-password 
    restart: on-failure 
    ports: 
     - 27017:27017 
    volumes: 
     - ./mongodb:/data/db 
:

senin docker-compose.yml bu değişkenleri kullanmak için aşağıdaki pasajı bakın
İlgili konular