我開始使用 Github 操作來構建一些示例容器,而不是在本地進行構建。減少對我的機器等的依賴。似乎雖然在我的 MAC 上構建和推動是可行的,但創建一個動作來做它會失敗。
在本地進行測驗時,我確實確保我有一個更新的 Dockerfile 以確保一切都根據需要正確構建,但我的一部分認為它與使用 Github 操作構建作業系統有關,但我試圖更多地理解它.
我得到的錯誤是:
錯誤:未能解決:執行程式運行失敗[/bin/sh -c (/opt/mssql/bin/sqlservr &) | grep -q "Service Broker manager 已啟動" && /opt/sqlpackage/sqlpackage /a:Import /tsn:. /tdn:${DBNAME} /tu:sa /tp:$SA_PASSWORD /sf:/tmp/db.bacpac && rm /tmp/db.bacpac && pkill sqlservr]:退出代碼:1
我的作業流程操作是:
name: Docker Image CI MSSQL
on:
schedule:
- cron: '0 6 * * *'
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Prepare Variables
id: prepare
run: |
DOCKER_IMAGE=fallenreaper/eve-mssql
VERSION=$(date -u '%Y%m%d')
if [ "${{ github.event_name }}" = "schedule" ]; then
VERSION=nightly
fi
TAGS="${DOCKER_IMAGE}:${VERSION}"
if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
TAGS="$TAGS --tag ${DOCKER_IMAGE}:latest"
fi
echo ::set-output name=docker_image::${DOCKER_IMAGE}
echo ::set-output name=version::${VERSION}
echo ::set-output name=tags::${TAGS}
-
name: Login to DockerHub
if: success() && github.event_name != 'pull_request'
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
-
name: Docker Build & Push
if: success() && github.event_name != 'pull_request'
uses: docker/build-push-action@v2
with:
push: true
tags: ${{steps.prepare.outputs.tags}}
context: mssql/.
所以我想這會奏效。我正在構建的 Dockerfile 我mcr.microsoft.com/mssql/server:2017-latest認為可以使用。
Dockerfile:
FROM mcr.microsoft.com/mssql/server:2017-latest
ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=Password123!
ENV MSSQL_PID=Developer
ARG DBNAME=evesde
EXPOSE 1433
RUN apt-get update \
&& apt-get install unzip -y
RUN wget -progress=bar:force -q -O sqlpackage.zip https://go.microsoft.com/fwlink/?linkid=2165213 \
&& unzip -qq sqlpackage.zip -d /opt/sqlpackage \
&& chmod x /opt/sqlpackage/sqlpackage
RUN wget -o /tmp/db.bacpac https://www.fuzzwork.co.uk/dump/mssql-latest.bacpac
RUN ( /opt/mssql/bin/sqlservr & ) | grep -q "Service Broker manager has started" \
&& /opt/sqlpackage/sqlpackage /a:Import /tsn:. /tdn:${DBNAME} /tu:sa /tp:$SA_PASSWORD /sf:/tmp/db.bacpac \
&& rm /tmp/db.bacpac \
&& pkill sqlservr
編輯當我繼續閱讀各種檔案時,我正在嘗試理解和測驗各種方法,看看我是否可以生成一個構建。我在想模擬 MAC 可能很有用,所以我也嘗試使用操作:runs-on: macos:latest看看是否可以解決它,但我沒有看到收益,因為運行docker-login-action@v1會失敗。
uj5u.com熱心網友回復:
建議調查grep -q "Service Broker manager has started" &&
也許這會失敗,因為您開始/opt/mssql/bin/sqlservr然后立即檢查它是否已啟動。在大多數情況下,啟動需要幾秒鐘。
測驗我的論文是否正確。建議在戰略位置插入少量sleep 10或命令。timeout
uj5u.com熱心網友回復:
查看每個行專案,我最終得到了以下 Dockerfile。
FROM mcr.microsoft.com/mssql/server:2017-latest
ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=Password123!
ENV MSSQL_PID=Developer
ENV DBNAME=evesde
EXPOSE 1433
RUN apt-get update \
&& apt-get install unzip -y
RUN wget -progress=bar:force -q -O sqlpackage.zip https://go.microsoft.com/fwlink/?linkid=2165213 \
&& unzip -qq sqlpackage.zip -d /opt/sqlpackage \
&& chmod x /opt/sqlpackage/sqlpackage
RUN wget -progress=bar:force -q -O /mssql-latest.bacpac https://www.fuzzwork.co.uk/dump/mssql-latest.bacpac
RUN ( /opt/mssql/bin/sqlservr & ) | grep -q "Service Broker manager has started" \
&& /opt/sqlpackage/sqlpackage /a:Import /tsn:. /tdn:$DBNAME /tu:sa /tp:$SA_PASSWORD /sf:/mssql-latest.bacpac \
&& pkill sqlservr
#Cleanup of created bulk files no longer needed.
RUN rm mssql-latest.bacpac sqlpackage.zip
主要區別在于 bacpac 檔案的存盤位置。創建該檔案時似乎出現了問題。調整位置,分解匯入串列后,它似乎作業了。
注意:當檔案在 TMP 中創建時,它似乎是部分創建的,因此它可以識別現有檔案但它已損壞。不確定是否有尺寸限制,但這是一個觀察結果。將它放在構建的 / 目錄中給了我訪問和完整的檔案,所以我需要調整 /sf 參考。
最后,因為有不再需要的掛起檔案,我發現最好通過洗掉 sqlpackage 和 bacpac 檔案來進行一些清理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455992.html
標籤:sql服务器 重击 码头工人 dockerfile
