Fel*_*oll 0 sql-server docker dockerfile docker-compose
我目前正在尝试在 docker compose 中设置 SQL Server,并且想使用指令在构建时创建数据库RUN。这不起作用,但是当我使用 sh 在正在运行的容器上执行相同的命令时,它起作用
我的撰写文件如下所示:
version: "3.7"
services:
mssql:
build: ./mssql
environment:
SA_PASSWORD: "Password12345!"
ACCEPT_EULA: "Y"
container_name: mssqlDB
ports:
- "1433:1433"
restart: always
Run Code Online (Sandbox Code Playgroud)
这是我的 Dockerfile:
FROM mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
COPY ./prod.sql /
RUN ./opt/mssql-bin/sqlcmd -S localhost -U SA -P "Password12345!" -Q "Create Database HelloWorld"
CMD ["/opt/mssql/bin/sqlservr"]
Run Code Online (Sandbox Code Playgroud)
这是因为SQL Server实例尚未启动,您必须等待它。
从SQL Server 的 Docker Hub 官方页面,有一个 GitHub 存储库的链接,其中展示了如何在 Docker 容器上运行 sql 脚本。
下面我根据您的情况重新调整了 GitHub 代码
# Typically SQL Server takes about 5-10 seconds to start up
# Wait for the SQL Server to come up (90 sec) You can reduce to 20sec and see
sleep 90s
#run the setup script to create the DB and the schema in the DB
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P password -d master -i prod.sql
Run Code Online (Sandbox Code Playgroud)
#start SQL Server, start the script to create the DB and import the data
/opt/mssql/bin/sqlservr & initialize.sh
Run Code Online (Sandbox Code Playgroud)
FROM mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
COPY ./prod.sql /
# Grant permissions for the import-data script to be executable
RUN chmod +x ./initialize.sh
CMD /bin/bash ./entrypoint.sh
Run Code Online (Sandbox Code Playgroud)
我个人制定的另一个解决方案是运行SQL Server服务并等待该服务启动。
FROM mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
COPY ./prod.sql /
# Grant permissions for the import-data script to be executable
RUN chmod +x ./initialize.sh
CMD /bin/bash ./entrypoint.sh
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE MyTable (..)
Run Code Online (Sandbox Code Playgroud)
FROM mcr.microsoft.com/mssql/server:2017-latest-ubuntu
EXPOSE 1433
WORKDIR /
COPY ./create.sh /src/
COPY ./script.sql /src/
ENV ACCEPT_EULA Y
ENV SA_PASSWORD P@ssw0rd
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
RUN ( /opt/mssql/bin/sqlservr --accept-eula & ) | grep -q "Service Broker manager has started" \
&& /src/create.sh P@ssw0rd \
&& pkill sqlservr
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3459 次 |
| 最近记录: |