【问题标题】:starting a docker container with an image created using "docker-compose build"使用“docker-compose build”创建的镜像启动一个 docker 容器
【发布时间】:2017-10-29 18:04:29
【问题描述】:

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

我想知道这是否是解决问题的关键: 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 &lt;label_name&gt; &lt;image_name&gt;

在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 中进行了更改,但仍然出现“无法打开文件”错误:

=> CMD [ "python3", "full-path-to-the-file/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`

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

我想创建一个映像文件以在 Deployment 机器上使用,以避免将整个目录复制到 Deployment 机器(这似乎是使用“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 运行服务器 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

【问题讨论】:

  • 也许它不起作用,因为你在只需要一个时尝试 2 传递 2 个名称?
  • 我在做“docker run -d --name ”

标签: docker


【解决方案1】:

谢谢凯西,

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

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

为了测试我所说的是否正确,我建议您将 command 更改为 /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,这将使您更好地了解问题可能是什么

【讨论】:

【解决方案2】:

命令

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-compose up 而不是 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"]

【讨论】:

  • 感谢您的信息。你能在帖子中看到更新吗?实际上是否可以转换使用“docker-compose build”创建的项目,以便可以使用“docker run”命令执行创建的图像?如果没有,是否可以运行“docker-compose up”功能~无需~将所有源代码复制到部署机器?再次感谢您的意见!
  • 如果您需要在容器内的交互式 shell 中进行测试,请运行 bash 命令并将 -d 替换为 -it。
  • 谢谢,但容器没有运行。我运行“docker run -it --name apostx-cc-backoffice-work apostx-cc-backoffice-work”并得到以下结果“backendworkproj/manage.py runserver 0.0.0.0:8000”:[Errno 2]没有这样的文件或目录”
  • 好的——我做到了。仍然有错误(我注意到我在帖子中做了什么) - 做更多的研究..
猜你喜欢
  • 1970-01-01
  • 2014-05-07
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
相关资源
最近更新 更多