2017-02-16 23 views
0

私はAsp.net Core、PostgreSql、DockerをWindows 10にインストールしています(PostgreSQLはインストールされていません)。だから、アプリケーションを起動する前に(シングルトン依存性注入を登録するために)SQLスクリプトを実行してデータを更新する必要があります。アプリケーションがドッカーで起動する前にsqlスクリプトを実行する方法

# 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の内容です::次のように

私Dockerfileの内容

#!/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-clientpsqlを使用して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 

感謝を。

関連する問題