所以这是我的 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 ?我现在不知道,我需要你的帮助。
你错过了告诉它解析/运行 shell 的下一个参数的
-c
标志。sh
没有它,我相信它正在寻找一个名称mysqld_safe --data=/var
为要运行的脚本,这不是mysqld_safe
带有 arg的脚本--data=/var
,而是目录名称中带有空格、破折号和等号的单个脚本名称。相反,你想要: