
これが私の 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
--data=/var
CMD ["sh", "-c", "mysqld_safe --data=/var"]