我正在尝试使用mysql:5 docker镜像创建一个docker容器。一旦MySQL服务器启动并运行,我想创建一些数据库,用户和表。
我的Dockerfile看起来像这样;
FROM mysql:5
# Add db.data with correct permissions
RUN mkdir /server_data
WORKDIR /server_data
ADD --chown="root:root" ./db.data .
# Copy setup directory
COPY ./setup setup
COPY ./config /etc/mysql/conf.d
CMD ["./setup/setup.sh", "mysql", "-u", "root", "<", "./setup/schema.sql"]
我的./setup/setup.sh脚本看起来像这样;
#!/bin/bash
# wait-for-mysql.sh
set -e
shift
cmd="$@"
until mysql -uroot -c '\q'; do
>&2 echo "mysql is unavailable - sleeping"
sleep 1
done
>&2 echo "mysql is up - executing command"
exec $cmd
我的docker-compose.yml看起来像这样;
version: "3"
services:
db:
build: ./db
volumes:
- data-db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=password
restart: always
container_name: db
volumes:
data-db:
当我运行'docker-compose up --build'时,我得到以下输出;
建筑物分类
第1/7步:从mysql:5
---&GT; 0d16d0a97dd1
步骤2/7:运行mkdir / server_data
---&GT;使用缓存
---&GT; 087b5ded3a53
步骤3/7:WORKDIR / server_data
---&GT;使用缓存
---&GT; 5a32ea1b0a49
步骤4/7:ADD --chown =“root:root”./ db.data。
---&GT;使用缓存
---&GT; 5d453c52a9f1
步骤5/7:COPY ./setup setup
---&GT; 9c5359818748
步骤6/7:COPY ./config /etc/mysql/conf.d
---&GT; b663a380813f
步骤7/7:CMD [“./ setup / setup.sh”,“mysql”,“ - u”,“root”,“&lt;”,“。/ setup / skipmaql”]
---&GT;在4535b2620141中运行
移除中间容器4535b2620141
---&GT; 2d2fb7e308ad
成功建成2d2fb7e308ad
成功标记了wasdbsandbox_db:最新的
重新创建数据库......完成了
附加到db
db | ERROR 2002(HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器(2)
db | mysql不可用 - 睡觉
db | ERROR 2002(HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器(2)
db | mysql不可用 - 睡觉
这是无休止的,直到我按下Ctrl + c。
如果我在Dockerfile中注释掉CMD行,那么运行'docker-compose up --build'的输出就是官方mysql Dockerfile中定义的ENTRYPOINT命令的输出。
为什么当我使用自己的CMD命令时,mysql永远不会启动?
答案 0 :(得分:2)
官方的mysql映像已经支持了这一点。无需制作自己的自定义解决方案。
查看&#34;初始化新实例&#34;下的Docker Hub README。
您可以在5.7 Dockerfile(例如)that it copies in a ENTRYPOINT script下的官方图片中看到。该脚本不会在构建时运行,但是在CMD启动守护程序之前的运行时。
在现有的ENTRYPOINT脚本中,您会看到/docker-entrypoint-initdb.d/
放入it will process any files
简而言之,当你从现有的官方形象开始一个新容器时,它将:
/docker-entrypoint-initdb.d/