加载docker容器后,如何在不运行docker compose的情况下运行它



我已经创建了一个Dockerfiledocker-compose.yml文件。我可以在Windows10上运行docker-compose up,它构建并运行我的Django web应用程序。然后,我可以成功地浏览到127.0.0.1:7000并练习我的web应用程序。

我的问题是,一旦我退出,如何在不运行docker-compose up的情况下再次启动我的映像?

当我键入docker images时,我看到两个图像:pythonmy_web_app。我试过

docker run --publish 7000:8000 -- detach my_web_app

但它立即退出。

我的Dockerfile

FROM python:3.6
ENV PYTHONUNBUFFERED 1
COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
RUN mkdir /code
WORKDIR /code
ADD . /code/
RUN useradd user
USER user

我的码头组合yml

version: "3"
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "7000:8000"

docker-compose.yml文件中,您已经编写了build: .,它使用位于路径.的Dockerfile并创建一个名为my_web_app的映像。

您有两个图像,因为Python被用作Dockerfile中的基础图像,所以docker首先提取该图像。另一个被创建为结果图像(其中包含python(。

现在,当你运行这个命令时:

docker run --publish 7000:8000 -- detach my_web_app

它创建了一个容器,但将立即退出,因为它没有要运行的命令/进程。

docker-compose.yml中,存在command: python manage.py runserver 0.0.0.0:8000,它在容器内运行此命令。

运行新容器的两种简单方法是:

  • docker run --publish 7000:8000 -- detach my_web_app python manage.py runserver 0.0.0.0:8000
    

在容器内运行指定的命令。

  • 或者您可以使用docker exec -ti my_web_app并添加要在>这个

如果您使用docker run my_web_app,它会立即退出,因为Dockerfile中没有CMD

正如其他人所回答的那样,您可以运行docker-compose up来重新运行容器。docker-compose.yml文件包含启动容器所需的许多设置。只有docker-compose命令读取该文件;普通的CCD_ 20没有。

如果你想用一个普通的docker run命令运行这个,你应该做几件事:

  • docker-compose.yml中删除command:行;将相同的CMD行添加到您的Dockerfile中。这使得映像具有一个可以运行的默认命令,而不需要每次运行该命令时都指定它。

  • docker-compose.yml中移除volumes:;您已经在DockerfileADD应用程序,所以您不想用主机中的随机内容覆盖它。

这将给您留下一个更简单的docker-compose.yml文件

version: "3"
services:
web:
build: .
image: my_web_app  # (override the name Compose picks)
ports:
- "7000:8000"

一旦你有了这个,你就可以把它翻译成docker run命令

docker run 
-d 
-p 7000:8000    # ports:
my_web_app       # image:

如果您有其他选项(environment:volumes:…(,则需要将其转换为docker run选项。如果您需要在容器之间进行通信,Compose会为您创建一个default网络,您还需要重新创建它。

这就是运行它的方式。docker-compose up

如果您想让docker-compose up -d在后台运行,请运行它。

Dockerfile生成映像,然后docker-compose使用该映像来构建和运行服务。

如果您打算在不运行docker-compose的情况下运行服务,则应该在Dockerfile本身中定义如何执行容器。Checkout cmd

CMD ["python", "manage.py", "runserver"]

您可能应该将command从docker compose文件移到Dockerfile,然后使用docker-composedocker build再次构建映像。

一旦图像可用,只需使用即可运行

> docker run <image_name> --detach

最新更新