如何从 Docker compose 安装包?

How to install packages from Docker compose?

大家好,我是 Docker 的新手。我有一个 docker-compose.yml 看起来像这样:

version: "3"

services:
  lmm-website:
    image: lmm/lamp:php${PHP_VERSION:-71}
    container_name: ${CONTAINER_NAME:-lmm-website}
    environment:
      HOME: /home/user
    command: supervisord -n
    volumes:
      - ..:/builds/lmm/website
      - db_website:/var/lib/mysql
    ports:
      - 8765:80
      - 12121:443
      - 3309:3306
    networks:
      - ntw

volumes:
  db_website:

networks:
  ntw:

我想从 docker-compose 文件中安装 Yarn 包管理器:

sudo apt-get update && sudo apt-get install yarn

我不知道如何声明这个,我试过了

command: supervisord -n && sudo apt-get update && sudo apt-get install yarn

静默失败。我该如何正确声明?还是 docker-compose.yml 放错地方了?

试试这个

command: supervisord -n && apt-get update && apt-get install yarn

因为 sudo 在 docker 中不起作用。

为什么不使用专门为此任务设计的 Dockerfile

将 "image" 属性 更改为 "build" 属性 为 link Dockerfile。

您的 docker-compose.yml 看起来像这样:

services:
  lmm-website:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: ${CONTAINER_NAME:-lmm-website}
    environment:
      HOME: /home/user
    command: supervisord -n
      volumes:
        - ..:/builds/lmm/website
        - db_website:/var/lib/mysql
    ports:
      - 8765:80
      - 12121:443
      - 3309:3306
    networks:
      - ntw

volumes:
  db_website:

networks:

然后在与docker-compose.yml相同的路径下创建一个名为Dockerfile的文本文件,内容如下:

FROM lmm/lamp:php${PHP_VERSION:-71}

RUN apt-get update && apt-get install -y bash

您可以使用 Dockerfile 的 运行(cp、mv、ls、bash...)添加任意数量的 SO 命令,除了其他 Dockerfile 功能,如 ADD、COPY 等.

+信息:

https://docs.docker.com/engine/reference/builder/

+实例:

我做了一个名为 hello-docker-react 的 github 项目。顾名思义,它是一个 docker-react box,可以作为示例,因为我正在使用上面解释的过程安装 yarn 和其他工具。

除此之外,我还使用入口点 bash 脚本启动 yarn linked 到 docker-compose.yml 文件,使用 docker-compose入口点 属性.

https://github.com/lopezator/hello-docker-react

我第一次尝试帮忙:

要不要你试一试(我在网上找到的)

FROM lmm/lamp:php${PHP_VERSION:-71}
USER root
RUN apt-get update && apt-get install -y bash

你只能用Dockerfile来做,因为docker-compose.yml中的command运算符只在命令执行期间保持容器活动,然后它停止。