2017-02-10 13 views
7

doker-compose.ymlJak wczytać zmienne środowiskowe do kontenera dokowanego w komponent przy minimalnym przestoju?

version: '2' 
services: 
    app: 
    build: 
     context: . 
    command: python src/app.py 
    restart: on-failure 
    depends_on: 
     - db 
    environment: 
     - TJBOT_DB_HOST=db 
     - TJBOT_API_KEY 
     - TJBOT_AUTO_QUESTION_TIME 
    env_file: 
     - .env 
    db: 
    image: mongo:3.0.14 
    volumes: 
     - mongodbdata:/data/db 
volumes: 
    mongodbdata: 

Jeśli zmienię plik .env, jak mogę przeładować pojemnik do korzystania z nowych zmiennych środowiskowych przy minimalnym przestoju?

+0

Nie można wymyślić innej dobrej drogi niż "w dół", a następnie "w górę". Jakiś hacky horror wokół 'docker exec', jeśli nie chcesz tego zrobić? Jeśli się tak zmienią, może uzewnętrznią je na coś takiego jak konsul? – johnharris85

+0

Problem polega na tym, że użycie 'down' i' up' przeładowuje wszystkie usługi, ale chcę przeładować tylko moją usługę aplikacji. Myślę, że jest to najłatwiejszy sposób, ale w przypadku wielu usług może to chwilę potrwać. –

Odpowiedz

12

Jeśli korzystasz z yml z funkcją dokowania, możesz po prostu uruchomić docker-compose up -d i odtworzyć wszystkie kontenery, które zostały zmienione i pozostawić wszystkie niezmienione usługi nietknięte.

$ cat docker-compose.env2.yml 
version: '2' 

services: 
    test: 
    image: busybox 
    # command: env 
    command: tail -f /dev/null 
    environment: 
     - MY_VAR=hello 
     - MY_VAR2=world 
    test2: 
    image: busybox 
    command: tail -f /dev/null 
    environment: 
     - MY_VAR=same ole same ole 

$ docker-compose -f docker-compose.env2.yml up -d            
Creating network "test_default" with the default driver 
Creating test_test_1 
Creating test_test2_1 

$ vi docker-compose.env2.yml # edit the file to change MY_VAR 

$ docker-compose -f docker-compose.env2.yml up -d 
Recreating test_test_1 
test_test2_1 is up-to-date 

Po uruchomieniu pojemnikach jako docker stack deploy -c docker-compose.yml z wersją 3 formacie można zrobić toczenia aktualizację usługi, która będzie zapobiegać żadnych przestojów, jeśli masz wiele wystąpień swoim biegu serwisu. Ta funkcja jest wciąż bardzo nowa. Będziesz potrzebował wersji 1.13.1, aby naprawić niektóre problemy z aktualizacjami i tak jak w przypadku wszystkich tych nowych błędów, wciąż są one opracowywane.

+0

Usunąłem plik '.env', dodałem nowy plik' docker-compose.prod.yml' i zmieniłem domyślne ustawienia: 'docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d' –

Powiązane problemy