这是我的 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
您缺少指示它解析/运行 shell 的下一个参数的-c
标志。如果没有该标志,我相信它会寻找一个具有要运行的名称的脚本,这不是带有 arg 的脚本,而是目录名称中带有空格、破折号和等号的单个脚本名称。相反,您想要:sh
mysqld_safe --data=/var
mysqld_safe
--data=/var
CMD ["sh", "-c", "mysqld_safe --data=/var"]