簡體   English   中英

使用“docker-compose build”創建的圖像啟動 docker 容器

[英]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 更新

@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 更新

再次感謝@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.

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