簡體   English   中英

從正在運行的容器中獲取 docker-compose.yml 文件位置?

[英]Get docker-compose.yml file location from running container?

我通過執行docker-compose up創建了一些正在運行的 docker 容器。

有什么方法可以通過檢查正在運行的容器來獲取用於啟動這些容器的相應docker-compose.yml文件的確切文件路徑嗎?

據我所知, docker inspect CONTAINER_NAME不提供此信息, docker-compose也沒有提供從正在運行的容器中獲取與 compose 相關的信息的方法。

我想在腳本中做什么:

  • 列出 docker 主機上某些正在運行的容器
  • 獲取對應的 docker-compose.yml文件位置
  • 使用docker-compose一次性重啟對應 docker-compose 項目的所有容器

這個問題的答案似乎隨着 docker-compose 的新版本而改變。 有一個標簽"com.docker.compose.project.working_dir": "/var/opt/docker",它指向我啟動 docker-compose 的目錄。 我還沒有檢查那是pwd還是 docker-compose.yml 文件的實際位置。

這給了我關於 docker-compose 的有趣信息:

samuel@vmhost1:~$ docker inspect fc440a1afbaa | grep com.docker.compose
                "com.docker.compose.config-hash": "89069285a4783b79b421ea84f2b652becbdee148fbad095a6d9d85aab67ececc",
                "com.docker.compose.container-number": "1",
                "com.docker.compose.oneoff": "False",
                "com.docker.compose.project": "docker",
                "com.docker.compose.project.config_files": "docker-compose.yml",
                "com.docker.compose.project.working_dir": "/var/opt/docker",
                "com.docker.compose.service": "jenkins",
                "com.docker.compose.version": "1.25.0"
samuel@vmhost1:~$

我正在運行 docker-compose.yml 配置版本 3.6

它是目前不可能

作為替代方案,您可能會發現以下內容有幫助:

  • 使用docker ps -a | grep <certain_container> docker ps -a | grep <certain_container>
  • 使用locate docker-compose.yml並找到你想要的
  • 使用docker-compose restart (執行docker-compose查看選項)

據我所知,docker inspect CONTAINER_NAME 不提供此信息,docker-compose 也沒有提供從正在運行的容器中獲取與 compose 相關的信息的方法。

從您無法控制的已經運行的容器中,信息不存在。 如果容器創建任何主機安裝到相關目錄,您可以使用綁定安裝目錄推斷位置。 否則,可以在沒有 compose 的情況下部署容器,並且可以在沒有文件系統上的 compose 文件的情況下使用 compose(通過 stdin 進行管道傳輸),並且 compose 不會為您存儲有關運行容器的這些詳細信息。


我想在腳本中做什么:

  • 列出 docker 主機上某些正在運行的容器
  • 獲取對應的 docker-compose.yml 文件位置
  • 使用 docker-compose 一次性重啟對應 docker-compose 項目的所有容器

如果您只想在同一個項目中的所有容器上重新啟動,則不需要前兩個步驟,甚至不需要docker-compose 相反,您可以運行:

docker ps --filter "label=com.docker.compose.project=${your_compose_project}" -q \
| xargs docker restart

它使用標簽 docker-compose 添加到它部署的每個項目中。


如果您想主動存儲撰寫文件位置以供以后使用,您可以將其作為標簽注入您的撰寫文件:

version: '2'
services:
  test:
    image: busybox
    command: tail -f /dev/null
    labels:
      COMPOSE_PATH: ${PWD} # many Linux shells define the PWD variable

如果您的 shell 沒有設置${PWD}環境變量,您可以開始編寫:

PWD=$(pwd) docker-compose up -d

然后您可以稍后檢查容器的此標簽值:

docker inspect --format '{{.Config.Labels.COMPOSE_PATH}}' ${your_container_id}

您可以將過濾器和檢查命令鏈接在一起以查找特定項目的路徑:

docker ps --filter "label=com.docker.compose.project=${your_compose_project}" -q \
| xargs docker inspect --format '{{.Config.Labels.COMPOSE_PATH}}'

你知道,你的問題變成了我遇到的同一個問題的有用答案。 我使用了docker inspect <containerID>然后它給了我應該查看的位置。 特別是在這些行中:

HostConfig": {
            "Binds": [
....
...
],

如果您安裝了本地卷,例如./data然后檢查容器將為您提供路徑,例如docker inspect peertube_peertube_1 | jq .[0].HostConfig.Binds docker inspect peertube_peertube_1 | jq .[0].HostConfig.Binds 它不適用於沒有體積的容器,但它很少見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM