我已经创建了一个Dockerfile
和docker-compose.yml
文件。我可以在Windows10上运行docker-compose up
,它构建并运行我的Django web应用程序。然后,我可以成功地浏览到127.0.0.1:7000
并练习我的web应用程序。
我的问题是,一旦我退出,如何在不运行docker-compose up
的情况下再次启动我的映像?
当我键入docker images
时,我看到两个图像:python
和my_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:
;您已经在Dockerfile
中ADD
应用程序,所以您不想用主机中的随机内容覆盖它。
这将给您留下一个更简单的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-compose
或docker build
再次构建映像。
一旦图像可用,只需使用即可运行
> docker run <image_name> --detach