Использовать учетные данные внутри docker контейнера - PullRequest
0 голосов
/ 24 февраля 2020

Я создаю docker изображение из проекта, в котором у меня есть файл с учетными данными по умолчанию для базы данных. Во время выполнения контейнера docker я хочу передать реальные учетные данные и заменить переменные, определенные в этом файле. Каков наилучший способ сделать это? Я пытался использовать переменные окружения, но это не работает.

db_config.yml:

host: ${HOST}
user: ${USER}
pass: ${PASS}
port: ${PORT}
db: ${DB_NAME}

docker -compose.yml:

version: '2.3'

services:
  test_ctr:
      container_name: test
      image: container:latest

      network_mode: "host"
      environment: 
      - HOST=${HOST}
      - USER=${USER}
      - PASS=${PASS}
      - PORT=${PORT}
      - DB_NAME=${DB_NAME}

db_config. yml - это встроенное изображение, а язык - Python. В основном, когда я запускаю контейнер, сценарий db_config.yml имеет красный цвет и использует учетные данные файла. Когда я создаю образ, этот db_config.yml имеет учетные данные по умолчанию. но когда я запускаю контейнер, я хочу заменить этот файл

1 Ответ

0 голосов
/ 24 февраля 2020

Для отладки попробуйте выполнить:

docker exec -it <name-of-the-container> <command>

В вашем случае это означает: docker exe c -it test sh

Это должно открыть оболочку внутри контейнер. Затем введите:

printenv

Это напечатает все переменные окружения и их значения (таким образом, вы увидите, если переданные вами значения присутствуют)

Будет проблема, если контейнер происходит сбой при запуске (в этом случае невозможно использовать docker exe c).

СОВЕТ: Используйте файл .env, расположенный в том же каталоге, что и docker -compose.yml (или любой другой Ваш docker -компонентный файл - это) для передачи переменных.

.env:

KEY1=value1
KEY2=value2

В вашем случае это может выглядеть примерно так:

HOST=1.2.3.4
USER=sa
PASSWORD=42
PORT=4242
DB_NAME=mydb

Когда ваш бег:

docker-compose up

docker -compose будет искать этот файл .env и вставлять значения из этого файла

Удачи

...