Я не могу для жизни понять это. Я чувствую, что я действительно рядом, но я просто не совсем там. Вот мой Dockerfile:
FROM ubuntu:14.04
MAINTAINER Oscar Godson
RUN apt-get update
RUN apt-get install -y nodejs-legacy
RUN apt-get install -y npm
RUN apt-get install -y mysql-server
RUN apt-get install -y mysql-client
COPY . /src
WORKDIR /src
RUN service mysql start;\
mysql -u root < /src/bin/demo-data.sql;\
npm install
EXPOSE 4000
CMD ["node", "index.js"]
Если я перейду в интерактивный режим и перейду в bash в этой RUN service...
в конце концов, я вижу, что mysql запущен, демо-данные были импортированы и все работает, включая запуск моего приложения Node с node index.js
. Если я попытаюсь сделать еще один RUN
или CMD
вы видите ниже, он больше не сможет получить доступ к MySQL. Как будто он перестает работать.
Ошибка, которую я получаю Error: connect ECONNREFUSED
который происходит, когда он отсутствует, или данных нет. От меня, играя с ним, похоже, что MySQL не работает, если я пытаюсь получить к нему доступ после RUN
где я его запускаю.
PS БД MySQL здесь исключительно для развития. В производстве мы используем AWS RDS, поэтому поэтому он использует root без пароля и импортирует данные таким образом.
Проблема заключалась в том, что RUN
не следует использовать для длительных процессов, однако вы можете использовать только один вариант CMD
. По какой-то причине он не нажимал на меня, пока друг не указал на это, но я мог просто создать сценарий "installer.sh" и вызвать его с помощью CMD
. Теперь это не потеряло контекст MySQL. Мое обновление Dockerfile выглядит примерно так:
FROM ubuntu:14.04
MAINTAINER Oscar Godson
RUN apt-get update
RUN apt-get install -y nodejs-legacy
RUN apt-get install -y npm
RUN apt-get install -y mysql-server
RUN apt-get install -y mysql-client
COPY . /src
WORKDIR /src
RUN cd /src;npm install
EXPOSE 4000
CMD ./bin/installer.sh
Установщик, чем
service mysql start
mysql -u root < ./bin/demo-data.sql
node index.js