我正在嘗試學習 Docker,并嘗試使用 MariaDB 和 Go 創建一個簡單的 CRUD 應用程式。我Dockerfile為 Go創建了一個:
FROM golang:1.17
WORKDIR /src/app
COPY . .
# RUN go get -u github.com/go-sql-driver/mysql \
# go get -u github.com/gin-gonic/gin
RUN go build -o app .
CMD [ "./app" ]
而且我還有一個 docker-compose 所以我可以啟動 MariaDB 容器和 Go 容器:
version: '3.8'
services:
db:
container_name: appdb
image: mariadb:latest
volumes:
- ./dbdata:/var/lib/mysql/data
environment:
MYSQL_ROOT_PASSWORD: "1234"
MYSQL_DATABASE: "crudapp"
MYSQL_USER: "root"
MYSQL_PASSWORD: "root"
app:
container_name: crudapi
build:
context: .
ports:
- '8080:8080'
depends_on:
- db
當我運行docker-compose up的appdb容器啟動,但crudapi沒有。它似乎啟動然后關閉,因為我在控制臺中有退出代碼 0。我在網上搜索,但無法弄清楚為什么會發生這種情況。我看到我應該嘗試添加tty:true到docker-compose檔案中,但它也不起作用。
我在這里做錯了什么?
uj5u.com熱心網友回復:
depends_on在啟動您的應用程式之前不會等待資料庫準備就緒,因此在啟動時 Compose 不會等到容器appdb“準備好”(無論這對您的特定應用程式意味著什么) - 僅直到它運行。
在實踐中,您必須在應用程式代碼中實施檢查,無論是在啟動時還是在由于任何原因丟失連接時,您還可以包含一個類似等待的工具。
uj5u.com熱心網友回復:
容器不會等待 db 啟動。您必須在您的應用程式中添加超時。或者實作用于檢查 for 回圈的邏輯,直到 db 容器啟動。
或者你可以使用這里描述的腳本 - Docker 控制啟動腳本
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/368179.html
上一篇:如何從docker正確轉儲和恢復postgresql資料庫
下一篇:Heroku、R和Gdal
