容器在使用Dockerfile时起作用,但在使用docker-compose.yml时不起作用

玛古先生

我想做什么

我正在尝试使用Docker Compose创建开发环境。

我将创建以下容器:

  • 蟒蛇
  • 阿帕奇
  • MySQL的

我将首先开始使python容器正常工作。

我的问题

当我只使用python时,我的python容器保持运行Dockerfile但是,当我使用docker-compose.yml文件时,该容器立即退出。我希望它继续运行。我究竟做错了什么?提前致谢。

app(develop) $ docker --version
Docker version 20.10.3, build 48d30b5

app(develop) $ docker-compose --version
docker-compose version 1.28.2, build 67630359

Docker文件

我首先创建了一个 Dockerfile.python

# Set base image (host OS)
FROM python:3.9-slim-buster

# Run apt update and upgrade and install as necessary.
RUN apt update; \
    apt upgrade -y --no-install-recommends; \
    apt install python3-pip -y; \
    apt autoremove -y; \
    rm -vfr /var/lib/apt/lists/*

# Set the working directory in the container.
RUN mkdir -v /code
WORKDIR /code

# Command to run on container start
CMD ["/bin/bash"]

我能够成功构建容器。

app(develop) $ ls -laR
total 32
drwxrwxr-x 5 mike mike 4096 Feb  3 22:18 .
drwxrwxr-x 4 mike mike 4096 Feb  1 13:51 ..
-rw-rw-r-- 1 mike mike 3357 Feb  3 22:08 docker-compose.yml
-rw-rw-r-- 1 mike mike 3070 Feb  3 22:18 Dockerfile.python
drwxrwxr-x 8 mike mike 4096 Feb  3 21:04 .git
drwxrwxr-x 2 mike mike 4096 Jan 31 15:01 src

./src:
total 16
drwxrwxr-x 2 mike mike 4096 Jan 31 15:01 .
drwxrwxr-x 5 mike mike 4096 Feb  3 22:18 ..
-rw-rw-r-- 1 mike mike  178 Jan 31 15:01 script.py


app(develop) $ docker build --tag my/python:0.1 \
> --file Dockerfile.python \
> .
blah, blah, blah
Successfully tagged my/python:0.1


app(develop) $ docker image ls
REPOSITORY         TAG                   IMAGE ID       CREATED              SIZE
my/python          0.1                   9ad1a86c619c   About a minute ago   510MB
python             3.9-slim-buster       677f7ac99e48   9 days ago           114MB

我能够成功创建并启动容器。

app(develop) $ docker run --name my-python \
> --mount 'type=bind,source=/home/mike/my-python-projects/app,destination=/code/' \
> --hostname=python-dev-cont \
> --interactive --tty --detach \
> my/python:0.1
3a29eaa6955dac3d1aaf6a27f80c2f6518fd788f2d0ed88a76797932842176ec


app(develop) $ docker container ls --all
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS          PORTS     NAMES
3a29eaa6955d   my/python:0.1   "/bin/bash"   13 seconds ago   Up 12 seconds             my-python


app(develop) $ docker exec --interactive --tty my-python /bin/bash
[email protected]:


[email protected]:/code# python --version
Python 3.9.1


[email protected]:/code# pip3 --version
pip 21.0 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)


[email protected]:/code# python src/script.py 
Hello World from Python!!!
x is: 4
That's all folks!


[email protected]:/code# exit
exit


app(develop) $ docker container stop my-python 
my-python


app(develop) $ docker container rm my-python 
my-python


app(develop) $ docker container ls --all
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

到目前为止一切都很好。

docker-compose.yml

由于我将拥有如上所述的其他容器,因此我想使用Docker Compose,以便这些容器可以一起工作。

这是代码 docker-compose.yml

version: "3.8"

# =============================================================================
# docker container create
# =============================================================================
services:
# -----------------------------------------------------------------------------
  python:
# -----------------------------------------------------------------------------
    container_name: "my-python"
    
    build:
      context: "."
      dockerfile: "Dockerfile.python"

    image: "my/python:0.1"
    
    hostname: "python-dev-cont"
    
    volumes:
      - type: bind
        source: .
        target: /code/

当我使用以下命令时,将创建,启动并立即退出容器。

app(develop) $ docker-compose up --build --detach
Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
Building python
Sending build context to Docker daemon   80.9kB

Step 1/5 : FROM python:3.9-slim-buster
 ---> 677f7ac99e48
Step 2/5 : RUN apt update;     apt upgrade -y --no-install-recommends;     apt install python3-pip -y;     apt autoremove -y;     rm -vfr /var/lib/apt/lists/*
 ---> Using cache
 ---> 3be88973dbbc
Step 3/5 : RUN mkdir -v /code
 ---> Using cache
 ---> 91d715fef9d4
Step 4/5 : WORKDIR /code
 ---> Using cache
 ---> b746571615f7
Step 5/5 : CMD ["/bin/bash"]
 ---> Using cache
 ---> df09d2624564
Successfully built df09d2624564
Successfully tagged my/python:0.1
Creating my-python ... done


app(develop) $ docker container ls --all
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS                      PORTS     NAMES
b2dbaffe179d   my/python:0.1   "/bin/bash"   21 seconds ago   Exited (0) 20 seconds ago             my-python

我期望容器仅使用时就可以运行Dockerfile.python我究竟做错了什么?我正在使用相同的Dockerfile.python。

伊泰

那是因为您的映像定义为bash在命令中运行,这需要交互模式。

您可以添加stdin_open+tty来防止容器终止,但是您仍然必须这样exec做才能获取命令行,因为docker-compose流出了日志。

version: "3.8"

# =============================================================================
# docker container create
# =============================================================================
services:
# -----------------------------------------------------------------------------
  python:
# -----------------------------------------------------------------------------
    container_name: "my-python"
    
    build:
      context: "."
      dockerfile: "Dockerfile.python"

    image: "my/python:0.1"
    
    hostname: "python-dev-cont"

    stdin_open: true

    tty: true
    
    volumes:
      - type: bind
        source: .
        target: /code/

您也可以使用 docker-compose run my-python

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

docker-compose集成在pycharm中不起作用

使用docker-compose时,Healthcheck根本不起作用(我的服务不等待Kafka在启动前启动)

使用动词时workingdirectory不起作用

Docker Compose主机名命令不起作用

Docker-compose依赖性似乎不起作用

Docker-compose容器端口不起作用

docker-compose设置环境变量不起作用

Docker-compose与MySql的容器连接不起作用

docker-compose mongodb新鲜实例不起作用

docker-compose-更改docker hub值不起作用?

当我有“体积”时,Docker Compose不起作用,否则它将起作用。为什么?

使用VSCode远程连接到Docker容器时,“ code”命令不起作用

移动docker-compose.yml文件时,Nginx图像的docker-compose不起作用

Docker Compose Bash命令在YAML中不起作用,但在容器中起作用

带有 docker-compose 的 AdminMongo 不起作用

POST 请求在 docker-compose 容器中不起作用

使用 docker-compose 运行 nodejs 不起作用,但使用 docker run 命令

docker compose rails 6 示例与 mailcatcher 不起作用

docker-compose 在特定目录下不起作用

Docker Compose OpenJDK - 卷映射不起作用

Docker Compose 绑定挂载在 GitHub 操作中不起作用

Docker Compose 和 Xdebug 在 PhpStorm 中不起作用

使用 GoogleFonts 时 FontWeight 不起作用

当 docker-compose 中有命令时,nginx docker alpine envsubst 不起作用

在没有 sudo 的情况下使用 docker-compose 不起作用

使用 docker compose up 的本地主机不起作用

Traefik 的“使用 docker-compose 的基本示例”不起作用

氣流 docker-compose.yml 中的連接管理根本不起作用?

Jetpack Compose Canvas drawPath 不起作用