我有一个包含以下代码的Dockerfile
FROM microsoft/mssql-server-windows-express
COPY ./create-db.sql .
ENV ACCEPT_EULA=Y
ENV sa_password=##$wo0RD!
CMD sqlcmd -i create-db.sql
并且我可以创建映像,但是当我运行带有映像的container时,我在SQL Server上看不到创建的数据库,因为脚本是在SQL Server启动之前执行的。
是否可以在使用SQL Server启动服务后执行脚本?
2条答案
按热度按时间bkkx9g8r1#
RUN用于在映像中构建层。CMD是在启动已构建映像的示例(“容器”)时运行的命令。
此外,如果您的脚本依赖于这些环境变量,如果它是旧版本的Docker,它可能会失败,因为这些变量没有按照您希望的方式定义!
在旧版本的docker中,Dockerfile ENV命令使用空格而不是“="
您的Dockerfile可能应该是:
这将创建一个包含数据库的映像,其中包含您的密码。
(If SQL文件以某种方式使用了环境变量,这是没有意义的,因为在复制SQL文件之前,您还可以更新它。)如果您希望能够通过使用docker run
--env sa_password=##$wo0RD! ...
覆盖docker build和docker run步骤之间的密码,则需要将最后一行更改为:它是从上游映像继承的CMD行的修改版本。
4si2a6ki2#
你可以点击这个链接https://github.com/microsoft/mssql-docker/issues/11.creits到**Robin Moffatt.**修改你的docker-compose.yml文件,使其包含以下内容