![](/img/trans.png)
[英]Error in executing a command when starting a container using docker-compose
[英]starting a docker container with an image created using "docker-compose build"
我正在嘗試啟動一個使用docker-compose build
創建的 Docker 映像。
當在正確的目錄中時, docker-compose build
工作正常
當在正確的目錄中時, docker-compose up
正常工作。
我有一個如下所示docker-compose.yml
:
version: '3'
services:
db:
image: postgres
web:
build: .
image: apostx-cc-backoffice-work
command: python3 backendworkproj/manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
問題是當我運行時:
docker run -d --name apostx-cc-backoffice-work apostx-cc-backoffice-work
容器根本沒有啟動- 我沒有收到任何消息或任何東西..
docker ps
不顯示任何容器已啟動。
我該如何開始?
TIA
@Sergiu - 這是您建議的結果..
$ docker run -d --name test apostx-cc-backoffice-work
07f012c11047b34834c5dac840aefcb8164355b9a65d6beca43350f450d5b7fb
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
07f012c11047 apostx-cc-backoffice-work "/bin/bash" 11 minutes ago Exited (0) 11 minutes ago test
dd42f4b957e7 apostx-cc-backoffice-work "/bin/bash" About an hour ago Exited (0) About an hour ago apostx-cc-backoffice-work
我想知道這是否可能是解決問題的關鍵: 部署 docker-compose 容器
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
07f012c11047 apostx-cc-backoffice-work "/bin/bash" 36 minutes ago Exited (0) 36 minutes ago test
dd42f4b957e7 apostx-cc-backoffice-work "/bin/bash" About an hour ago Exited (0) About an hour ago apostx-cc-backoffice-work
1e3298e55da1 wmaker-locl-officework "catalina.sh run" 5 months ago Exited (143) 5 days ago
這就是當我查看已退出項目的日志時發生的情況:
$ docker logs 07f012c11047
<no output>
$ docker logs dd42f4b957e7
<no output>
@BMitch - 感謝您的回復。 這是我正在關注的文檔之一: Dockerizing the DJango Application
是否可以轉換使用以下命令創建的 Docker 項目: docker-compose build
以便它生成可以使用docker run -d --name <label_name> <image_name>
在docker-compose.yml
文件中,我指定了以下選項: image: apostx-cc-backoffice-work
以便生成圖像。
關於我在 Dockerfile 中的 CMD 行,您是正確的。
It was :
`CMD ["/bin/bash"]`
Now it is
`CMD [ "python3", "/code/backendworkproj/manage.py runserver 0.0.0.0:8000" ]`
Dockerfile
如下( Dockerfile
了一些項目以使其更短):
FROM python:3.6.2
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
[..snip ..]
# the code built/referenced when using the "docker-compose build" command
ADD . /code/
CMD [ "python3", "/code/backendworkproj/manage.py runserver 0.0.0.0:8000" ]
在
docker-compose.yml
,我使用了下面的選項來創建一個圖像:image: apostx-cc-backoffice-work (pls see `docker-compose.yml` above)
以下是運行的命令
# ls
appmaster.pth backendworkproj backendworkproj@tmp docker-compose.yml Dockerfile requirements.txt
# ls backendworkproj
appmasterdata backendworkapp db.sqlite3 manage.py static
authorization backendworkproj generalinfo README.md usethis.txt
# docker run -d --name apostx-cc-backoffice-work apostx-cc-backoffice-work
dbc73335779a89b4fb31e91268c99b0e3f2b2ecbabe7bf136f82e11acbe70ee5
# docker container logs dbc73335779a
python3: can't open file '/code/backendworkproj/manage.py runserver 0.0.0.0:8000': [Errno 2] No such file or directory
我已經在 Dockerfile 中進行了更改,但仍然收到“無法打開文件”錯誤:
=> CMD [“python3”,“文件的完整路徑/manage.py runserver 0.0.0.0:8000”]
=> CMD [“python3”,“backendworkproj/manage.py runserver 0.0.0.0:8000”]
=> CMD [“python3”,“manage.py runserver 0.0.0.0:8000”]
我不能做任何事情:
`sudo docker exec -i -t 7bb5d8bfd45a /bin/bash`
因為容器的停留時間不夠長,無法進行任何故障排除。
我想創建一個在部署機器上使用的圖像文件,以避免將整個目錄復制到部署機器(這似乎是使用“docker-compose up”時的要求)
這可能嗎? 如果沒有,有沒有辦法用“docker-compose up”來做到這一點,這樣所有的代碼就不必復制到部署機器上?
TIA
再次感謝@BMitch
正如您所說,該命令在“已停止的容器”上起作用。
# docker run -it apostx-cc-backoffice-work /bin/bash
root@5d66b0b648e9:/code# ls
Dockerfile appmaster.pth backendworkproj backendworkproj@tmp docker-compose.yml requirements.txt
root@5d66b0b648e9:/code/backendworkproj# ls
README.md authorization backendworkproj generalinfo static
appmasterdata backendworkapp db.sqlite3 manage.py usethis.txt
root@5d66b0b648e9:/code/backendworkproj# pwd
/code/backendworkproj
root@5d66b0b648e9:/code/backendworkproj# ls -alrt
total 208
-rw-r--r-- 1 root root 11676 Oct 29 17:27 usethis.txt
drwxr-xr-x 4 root root 4096 Oct 29 17:27 static
-rw-r--r-- 1 root root 813 Oct 29 17:27 manage.py
drwxr-xr-x 4 root root 4096 Oct 29 17:27 generalinfo
-rw-r--r-- 1 root root 155648 Oct 29 17:27 db.sqlite3
drwxr-xr-x 3 root root 4096 Oct 29 17:27 backendworkproj
drwxr-xr-x 5 root root 4096 Oct 29 17:27 backendworkapp
drwxr-xr-x 5 root root 4096 Oct 29 17:27 authorization
drwxr-xr-x 4 root root 4096 Oct 29 17:27 appmasterdata
-rw-r--r-- 1 root root 0 Oct 29 17:27 README.md
drwxr-xr-x 2 root root 4096 Oct 29 17:27 .idea
drwxr-xr-x 8 root root 4096 Oct 29 17:27 .git
drwxr-xr-x 10 root root 4096 Oct 29 21:56 .
drwxr-xr-x 1 root root 4096 Oct 29 23:32 ..
在Dockerfile
,我對 CMD 進行了更改:
CMD [ "python3", "/code/backendworkproj/manage.py runserver 0.0.0.0:8000"]
我沒有對docker-compose.yml
進行任何更改,然后運行以下命令:
docker-compose build
docker rm -f apostx-cc-backoffice-work
最后,我運行了下面的操作系統命令(但仍然出現錯誤)
# docker run -it --name apostx-cc-backoffice-work apostx-cc-backoffice-work
python3: can't open file '/code/backendworkproj/manage.py runserver 0.0.0.0:8000': [Errno 2] No such file or directory
# docker run -it apostx-cc-backoffice-work /bin/bash
root@c70ae7ea289e:/code# which runserver
root@c70ae7ea289e:/code# ls /code/backendworkproj/manage.py
/code/backendworkproj/manage.py
root@c70ae7ea289e:/code# which runserver
root@c70ae7ea289e:/code# python --version
Python 3.6.2
謝謝凱西,
因此,根據您的新編輯,我可以看到您的容器正在運行,然后一旦完成該過程,它就會退出
如果您執行docker ps -a
您應該會看到您的運行和退出的容器。
為了測試我所說的是否正確,我建議您將命令更改為/bin/true或/bin/bash 之類的內容,以查看容器是否繼續運行
編輯:
另外,我正在尋找您正在嘗試做的事情,我發現這可能對您有用:
https://howchoo.com/g/y2y1mtkznda/getting-started-with-docker-compose-and-django
https://blog.syncano.io/configuring-running-django-celery-docker-containers-pt-1/
編輯2:
要查看會發生什么,您可以執行docker logs 07f012c11047
這將使您更好地了解問題可能是什么
命令
docker run -d --name apostx-cc-backoffice-work apostx-cc-backoffice-work
將使用默認命令從您的圖像啟動一個容器。 從你的docker ps -a
輸出:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
07f012c11047 apostx-cc-backoffice-work "/bin/bash" 11 minutes ago Exited (0) 11 minutes ago test
該命令是/bin/bash
,您在未定義任何輸入的情況下運行該命令。 默認情況下,當 bash 在沒有任何輸入的情況下運行時,它會立即退出。 容器的內部和外部都是一樣的:
$ bash </dev/null
$
“容器根本沒有啟動”的評論是不准確的。 它確實啟動了,並且立即退出。 容器中沒有日志,就像上面的 bash 行中沒有輸出一樣。
如果您想使用 docker-compose.yml 中定義的選項,那么您應該使用 docker docker-compose up
代替 docker docker run
命令。
從您更改的問題來看,錯誤是:
python3: can't open file '/code/backendworkproj/manage.py runserver 0.0.0.0:8000': [Errno 2] No such file or directory
告訴你 python 正在尋找一個文件名: /code/backendworkproj/manage.py runserver 0.0.0.0:8000
而不是/code/backendworkproj/manage.py
。 使用 json 格式時,您需要在命令行上分隔參數。 所以替換:
CMD [ "python3", "/code/backendworkproj/manage.py runserver 0.0.0.0:8000" ]
和:
CMD ["python3", "/code/backendworkproj/manage.py"," runserver", "0.0.0.0:8000"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.