Я пытаюсь создать файл docker, в котором я сначала загружаю и устанавливаю Cloud SQL Proxy, перед запуском nodejs.
FROM node:13
WORKDIR /usr/src/app
RUN wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
RUN chmod +x cloud_sql_proxy
COPY . .
RUN npm install
EXPOSE 8000
RUN cloud_sql_proxy -instances=[project-id]:[region]:[instance-id]=tcp:5432 -credential_file=serviceaccount.json &
CMD node index.js
При создании файла docker Я не получаю никаких ошибок. Кроме того, файл serviceaccount. json включен и найден.
При запуске файла docker и проверке журналов я вижу, что соединение в моем приложении nodejs отклонено. Так что должна быть проблема с прокси Cloud SQL. Кроме того, я не вижу никакого вывода облачного SQL прокси в журналах, только из приложения nodejs. Когда я создаю виртуальную машину и устанавливаю оба пакета отдельно, это работает. Я получаю вывод типа «готов к подключению».
Так что мой файл docker почему-то неверен, потому что прокси-сервер Cloud SQL не установлен или не работает. Чего мне не хватает?
Редактировать:
У меня все получилось, но я не уверен, что это правильный способ сделать.
Теперь это мой dockerfile:
FROM node:13
WORKDIR /usr/src/app
COPY . .
RUN chmod +x wrapper.sh
RUN wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
RUN chmod +x cloud_sql_proxy
RUN npm install
EXPOSE 8000
CMD ./wrapper.sh
А это мой упаковщик. sh file:
#!/bin/bash
set -m
./cloud_sql_proxy -instances=phosphor-dev-265913:us-central1:dev-sql=tcp:5432 -credential_file=serviceaccount.json &
sleep 5
node index.js
fg %1
Когда я удаляю "sleep 5", он не работает, потому что сервер уже работает до того, как будет установлено соединение cloud_sql_proxy. Со сном 5 он работает.
Есть ли другой / лучший способ подождать, пока первая команда не будет полностью выполнена?