2017-02-16 56 views
0

我在Windows 10(未安装PostgreSql)中使用Asp.net Core,PostgreSql和Docker部署项目。所以我必须在应用程序启动之前运行sql脚本来更新数据(用于注册单例依赖注入)。如何在Docker中启动应用程序之前运行sql脚本

我Dockerfile的内容如下:

# TODO use official docker image 
FROM microsoft/dotnet:1.1.0-sdk-projectjson 

# Install .NET CLI dependencies 
RUN apt-get update && apt-get install -y --no-install-recommends \ 
     autoconf \ 
     automake \ 
     bzip2 \ 
     file \ 
     g++ \ 
     gcc \ 
     imagemagick \ 
     libbz2-dev \ 
     libc6-dev \ 
     libcurl4-openssl-dev \ 
     libdb-dev \ 
     libevent-dev \ 
     libffi-dev \ 
     libgdbm-dev \ 
     libgeoip-dev \ 
     libglib2.0-dev \ 
     libjpeg-dev \ 
     libkrb5-dev \ 
     liblzma-dev \ 
     libmagickcore-dev \ 
     libmagickwand-dev \ 
     libmysqlclient-dev \ 
     libncurses-dev \ 
     libpng-dev \ 
     libpq-dev \ 
     libreadline-dev \ 
     libsqlite3-dev \ 
     libssl-dev \ 
     libtool \ 
     libwebp-dev \ 
     libxml2-dev \ 
     libxslt-dev \ 
     libyaml-dev \ 
     make \ 
     patch \ 
     xz-utils \ 
     zlib1g-dev \ 
    && rm -rf /var/lib/apt/lists/* 

# Set environment variables 
ENV ASPNETCORE_URLS="http://*:5000" 
ENV ASPNETCORE_ENVIRONMENT="Development" 

# Copy files to app directory 
COPY . /app 

# Set working directory 
WORKDIR /app 

# Restore NuGet packages 
RUN ["dotnet", "restore"] 

# Build app 
RUN ["dotnet", "build"] 

#dotnet ef migrations add InitialCreate 
RUN ["dotnet", "ef", "migrations", "add", "InitialCreate"] 
# Open up port 
EXPOSE 5000 

CMD chmod +x ./docker-start.sh 
CMD bash ./docker-start.sh 

这里是docker-start.sh的内容:

#!/bin/bash 

set -e 

# How to apply migrations 
dotnet ef database update 

# I would like to run sql file at here" 
psql -h postgres --username postgres -d POSTGRES_USER -a -f /app/static.sql  

# Start web app 
echo "Starting web app" 
dotnet run 

我怎样才能做到这一点?感谢先进。

+0

您的脚本运行命令是否失败?什么是问题? – evgenyl

+0

您可能会发现在代码中运行迁移更容易。看我的回答http://stackoverflow.com/a/38283080/5782634 – Brad

+0

是@evgenyl我不能运行脚本。 –

回答

0

我刚刚找到了解决方案。我错过了postgresql-client。我们将需要安装postgresql-client与使用psql来从Dockerfile运行sql脚本。

所以Dockerfile应改为:

# TODO use official docker image 
FROM microsoft/dotnet:1.1.0-sdk-projectjson 

# Install .NET CLI dependencies 
RUN apt-get update && apt-get install -y --no-install-recommends \ 
     autoconf \ 
     automake \ 
     bzip2 \ 
     file \ 
     g++ \ 
     gcc \ 
     imagemagick \ 
     libbz2-dev \ 
     libc6-dev \ 
     libcurl4-openssl-dev \ 
     libdb-dev \ 
     libevent-dev \ 
     libffi-dev \ 
     libgdbm-dev \ 
     libgeoip-dev \ 
     libglib2.0-dev \ 
     libjpeg-dev \ 
     libkrb5-dev \ 
     liblzma-dev \ 
     libmagickcore-dev \ 
     libmagickwand-dev \ 
     libmysqlclient-dev \ 
     libncurses-dev \ 
     libpng-dev \ 
     libpq-dev \ 
     libreadline-dev \ 
     libsqlite3-dev \ 
     libssl-dev \ 
     libtool \ 
     libwebp-dev \ 
     libxml2-dev \ 
     libxslt-dev \ 
     libyaml-dev \ 
     make \ 
     patch \ 
     xz-utils \ 
     zlib1g-dev \ 
     postgresql-client \ 
    && rm -rf /var/lib/apt/lists/* 

# Install netcat so that we can ping the database server until it 
RUN apt-get update -qq \ 
    && apt-get install -y netcat \ 
    && rm -rf /var/lib/apt/lists/* 

# Set environment variables 
ENV ASPNETCORE_URLS="http://*:5000" 
ENV ASPNETCORE_ENVIRONMENT="Development" 
ENV DB_HOSTNAME="posgres" 

# Copy files to app directory 
COPY . /app 

# Set working directory 
WORKDIR /app 

# Restore NuGet packages 
RUN ["dotnet", "restore"] 

# Build app 
RUN ["dotnet", "build"] 

#dotnet ef migrations add InitialCreate 
RUN ["dotnet", "ef", "migrations", "add", "InitialCreate"] 
# Open up port 
EXPOSE 5000 

CMD chmod +x ./docker-start.sh 
CMD bash ./docker-start.sh 

感谢。

相关问题