使用" docker-compose build"

时间:2017-10-29 18:04:29

标签: docker

我正在尝试启动使用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

@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

我想知道这是否是解决问题的关键: Deploying docker-compose containers

以下是更新:

$ 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如下(将一些项目缩短以使其缩短):

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中的更改,仍然可以打开&#34;无法打开文件&#34;错误:

=&GT; CMD [&#34; python3&#34;,&#34; full-path-to-the-file / manage.py runserver 0.0.0.0:8000" ]

=&GT; CMD [&#34; python3&#34;,&#34; backendworkproj / manage.py runserver 0.0.0.0:8000" ]

=&GT; CMD [&#34; python3&#34;,&#34; manage.py runserver 0.0.0.0:8000" ]

我不能做任何事情:

`sudo docker exec -i -t 7bb5d8bfd45a /bin/bash`

因为容器没有足够长的时间来进行任何故障排除。

我想创建一个在Deployment机器上使用的映像文件,以避免将整个目录复制到Deployment机器(这在使用&#34; docker-compose up&#34时似乎是一个要求; )

这可能吗?如果没有,有没有办法用&#34; docker-compose up&#34;这样就不必将所有代码都复制到部署机器上了吗?

TIA

更新BMitch

再次感谢@BMitch

该命令适用于&#34;已停止的容器&#34;就像你说的那样。

# 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 [&#34; python3&#34;,&#34; /code/backendworkproj/manage.py runserver   0.0.0.0:8000" ]

我没有对docker-compose.yml进行任何更改,然后运行以下内容:

docker-compose build

docker rm -f apostx-cc-backoffice-work

最后,我在下面运行了OS命令(但仍然出现错误)

# 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

2 个答案:

答案 0 :(得分:0)

谢谢凯西,

因此,根据您的新编辑,我可以看到您的容器运行,然后一旦完成该过程,就会退出

如果您要执行docker ps -a,您应该会看到运行并退出容器。

为了测试我所说的是真的,我建议您将命令更改为 / bin / true / bin / bash < / em>查看容器是否继续运行

修改

此外,我正在寻找你想要做的事情,我找到了你可能会觉得有用的东西:

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发生的事情,这会让您更好地了解问题所在

答案 1 :(得分:0)

命令

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
$

评论&#34;容器根本没有开始&#34;是不准确的。它确实开始,并立即退出。容器中没有日志,就像上面的bash行没有输出一样。

如果您想使用docker-compose.yml中定义的选项,那么您应该使用docker run而不是docker-compose up命令。

根据您更改的问题,错误:

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"]