Использование docker-compose Mysql + App

Я пытаюсь связать два контейнера с помощью докера.

MySQL Dockerfile:

...
EXPOSE 3306
CMD ["/usr/sbin/mysqld"]

App Dockerfile:

...
ADD . /services
CMD ["python", "-u", "services/run_tests.py"]

В run_tests.py я использовал

self.db = MySQLdb.connect(host="mysql", user="XYZ", passwd="XYZ", db="TEST_DB")

В моем docker-compose.yml:

app:
   build: .
   links:
      - mysql
mysql:
   image: XYZ/KJM

Когда я бегу docker-compose up Я не мог подключиться к MySQL контейнеру.

OperationalError: (2003, "Не удается подключиться к серверу MySQL на" rds "(111)")

РЕДАКТИРОВАТЬ: я не знаю, если мне нужно немного подождать, чтобы запустить докер приложения. Я предполагаю, что MySQL не работает, когда приложение пытается подключиться.

3 ответа

Это известная проблема, и она еще не решена. Проверьте эту ссылку Docker службы должны ждать

Вы абсолютно правы, что служба MySql еще не запущена, в то время как ваш контейнер приложений появляется очень быстро, и, следовательно, когда он пытается подключиться к MySql, соединение отклоняется. На стороне приложения вы можете написать логику повторных попыток. Что-то на этих линиях

while(numberOfRetries > 0) {

try {

  // Try to connect to MySql
} catch(Exception e) {

     numberOfRetries--;

     if(numberOfRetries == 0)
       // log the exception 
}

Надеюсь это поможет.

Начиная с Docker 1.13, это теперь решенная проблема. Теперь вы можете использовать HEALTHCHECK директива в вашем MySQL Dockerfile:

  1. Создайте скрипт проверки работоспособности, который будет exit 1 когда успех: select 1+1 from <table> или что-то. Позвони health.sh,

  2. В вашем Dockerfile скопируйте health.sh в контейнер.

  3. Использовать HEALTHCHECK CMD запустить health.sh скрипт.
  4. В вашем файле композиции измените app определение:

    версия: 2.1 приложение: сборка:. ссылки: - mysql зависит_он:
        mysql: условие: service_healthy 

Я думаю, что вы правы, что вам нужно подождать. Вы можете попытаться установить соединение в цикле и повторить попытку несколько раз с коротким сном между каждой попыткой.

Другие вопросы по тегам