%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%20%D0%BF%D1%80%D0%B8%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B5%20CMD.png)
Итак, вот мой Dockerfile:
FROM alpine
RUN apk add --update --upgrade --no-cache mysql mysql-client
RUN rm -rf /etc/my.cnf /etc/mysql/* /etc/mysql.d/ && \
mkdir -p /var/lib/mysql /var/run/mysqld && \
chown -R mysql /var/lib/mysql /run/mysqld && \
chgrp -R mysql /var/lib/mysql /run/mysqld && \
mysql_install_db --user=mysql --ldata=/var
EXPOSE 3306
USER mysql
CMD ["sh", "mysqld_safe --data=/var"]
Моя проблема в том, что когда я запускаю контейнер с образом, он не находит mysqld_safe
. Но когда я запускаю команду вручную, вот так: docker run mysql mysqld_safe --data=/var
это работает ! Я пытаюсь изменить dockerfile с помощью: ,
CMD ["sh", "cat -"]
чтобы посмотреть, связана ли проблема с mysqld_safe
командой, но здесь та же проблема, он не находит, cat
за исключением случая, когда я запускаю его с помощью docker run mysql cat -
.
Проблема в busybox
Alpine или в PATH? Пока не знаю, и мне нужна ваша помощь.
решение1
Вы пропустили -c
флаг, sh
который сообщает о необходимости анализа/запуска следующего аргумента оболочки. Без этого, я полагаю, он ищет скрипт с именем mysqld_safe --data=/var
для запуска, это не скрипт mysqld_safe
с arg --data=/var
, а одно имя скрипта с пробелом, дефисами и знаком равенства в имени каталога. Вместо этого вы хотите:
CMD ["sh", "-c", "mysqld_safe --data=/var"]