這是我的碼頭工人撰寫檔案。
version: '3'
services:
web:
image: emarcs/nginx-git
ports:
- 8081:80
container_name: Avida
working_dir: /usr/share/nginx/html
command: bash -c "git clone https://github.com/raju/temp.git && echo "cloned successfully" && mv Avida-ED-Eco /usr/share/nginx/html && echo "Successfully moved the file""
volumes:
- srv:/srv/git
- logs:/var/log/nginx
environment:
GIT_POSTBUFFER: 1048576
stdin_open: true
tty: true
firefox:
image: jlesage/firefox
ports:
- 5800:5800
volumes:
- my-vol:/data/db
depends_on:
- web
volumes:
my-vol:
driver: local
srv:
driver : local
logs:
driver : local
我正在做的是使用安裝了 git 的 docker nginx 映像,并使用該映像克隆一個目錄并將該目錄移動到 ngnix HTML 路徑以讀取它。但是在克隆容器后退出并且代碼消失了。如何在不退出代碼 0 的情況下保持容器運行。我嘗試了一些選項,例如 tty: true 和 std_in: true 沒有任何效果。
代碼為 0 的容器退出
uj5u.com熱心網友回復:
所以保持運行。
command:
- bash
- -ec
- |
git clone https://github.com/raju/temp.git
echo "cloned successfully"
mv -v Avida-ED-Eco /usr/share/nginx/html
echo "Successfully moved the file""
# keep it running
sleep infinity
但您更愿意創建一個 Dockerfile,您將在其中準備映像。
我更改了格式,您可以|在 YAML 檔案中閱讀。我替換&&為set -e,您可以閱讀它https://mywiki.wooledge.org/BashFAQ/105。
如果你想做一些修改然后啟動 nginx,你應該:
docker inspectdocker 鏡像并獲取它使用的命令,或者檢查構建鏡像的 Dockerfile- 像你一樣呼叫 shell 并做你想做的事情
- 然后呼叫它之前呼叫的命令
uj5u.com熱心網友回復:
您正在嘗試設定單個容器command:以在每次啟動時將一些代碼復制到容器中。最好只撰寫一次 Dockerfile 來完成這項作業。你可以啟動一個 DockerfileFROM任何你想要的鏡像,并在容器中做任何你需要做的設定作業。如果您不覆寫它們,它將繼承ENTRYPOINT和/或從基本影像。CMD
# Dockerfile
FROM emarcs/nginx-git
RUN mkdir /x
&& git clone https://github.com/raju/temp.git /x
&& mv /x/temp/Avida-ED-Eco /usr/share/nginx/html
&& rm -rf /x
# (Can you `COPY ./ /usr/share/nginx/html/` instead?)
然后在您的 Compose 檔案中,指定build:一個影像而不是使用 Docker Hub image:;不要覆寫command:;并且不要用命名卷覆寫影像的某些部分。
version: '3.8'
services:
web:
build: .
ports:
- 8081:80
# this is all that's required
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/512576.html
