[英]Error "Define and run multi-container applications with Docker" when running docker-compose cmd
[英]Building multi-container docker image on server with docker-compose
我正在處理一個多服務的docker映像,該映像在本地運行良好,但是在服務器端構建它時遇到了麻煩(可能是知識鴻溝)。 一種服務正在運行我的mysql數據庫,另一種服務是我的主應用程序(每個應用程序都有自己的Dockerfile,盡管我認為這是給定的),兩者均通過docker-compose鏈接並使用depends_on首先運行安裝mysql並確保其處於正常狀態。
我已經成功在本地構建和運行映像,並在推送到docker hub后將其拉到服務器,但是找不到有關如何在生產中正確使用docker-compose.yml文件的指導。 我花了一段時間才意識到我需要將docker-compose文件單獨上傳到生產環境,但是現在我對“ build”設置感到困惑。
在本地,我正在使用類似於以下文件的docker-compose.yml文件,其“ build”設置指向項目目錄中的db_config文件夾。
version: '2.1'
services:
mysql:
image: username/my_image:latest
container_name: db
build: ./db_config
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
MYSQL_USER: "dbuser"
MYSQL_PASSWORD: "12345"
MYSQL_DATABASE: "my_db"
healthcheck:
test: "exit 0"
my_app:
container_name: app
build: .
depends_on:
mysql:
condition: service_healthy
entrypoint:
- /usr/local/bin/docker-entrypoint.sh
ports:
- "80:8080"
嘗試在生產中使用此文件進行構建( docker-compose build
)會產生以下錯誤(名稱更改):
構建路徑/ home / user / my_app / db_config不存在,不可訪問或不是有效的URL。
生產中“構建”應該指向什么? 我應該以某種方式指向Docker映像本身中的Dockerfile,還是該配置在生產中完全不同? 是否還有其他配置需要更改?
事實是,您不應該為生產構建docker映像。
通常的設置是構建可在多種環境下運行的映像。 在UAT上,您可以測試此映像,如果還可以,則使生產環境停止當前容器,然后根據新映像啟動新容器。
要存儲圖像,您可以使用docker Registry。
至於您的錯誤,是因為您執行docker-compose build的機器上沒有db_config文件而發生。 與將撰寫文件上傳到生產環境類似,為了在生產環境上構建映像,您需要提供構建所需的所有必要項目文件。
如果要使其“干凈”,則正確的方法是在構建環境中構建映像,將映像推送到注冊表,然后在生產環境中進行部署。
是的,對於生產部署,您需要撰寫文件。 但是,您不需要進行構建。 如果可以訪問Docker注冊表,則應先停止正在運行的容器,然后再次啟動它們。
如果您對swarm進行操作,應該會更容易,因為swarm會檢查容器是否具有較新的映像庫,並且僅在需要映像更新時才停止它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.