【问题标题】:Convert a docker run command to docker-compose - setting directory dependency将 docker run 命令转换为 docker-compose - 设置目录依赖项
【发布时间】:2020-11-27 01:06:23
【问题描述】:

我有两个 docker run 命令 - 第二个容器需要在第一个创建的文件夹中运行。如下所示

docker run -v $(pwd):/projects \
             -w /projects \
             gcr.io/base-project/mainmyoh:v1 init myprojectname

cd myprojectname 

上面的 myprojectname 文件夹是由第一个容器创建的。我需要运行此文件夹中的第二个容器,如下所示。

docker run -v $(pwd):/project \
            -w /project \
            -p 3000:3000 \
            gcr.io/base-project/myoh:v1        

这是我目前拥有的 docker-compose 文件:

version: '3.3'
services:
    firstim:
        volumes:
            - '$(pwd):/projects'
        restart: always
        working_dir: /project
        image: gcr.io/base-project/mainmyoh:v1
        command: 'init myprojectname'

    secondim:
        image: gcr.io/base-project/myoh:v1
        working_dir: /project
        volumes:
        - '$(pwd):/projects'
        ports:
        - 3000:3000

实现这一点需要改变什么。

【问题讨论】:

  • WORKDIR /myprojectname ?

标签: docker docker-compose dockerfile docker-swarm docker-machine


【解决方案1】:

您可以让两个服务使用共享的named volume

version: '3.3'
services:
    firstim:
        volumes:
          - '.:/projects'
          - 'my-project-volume:/projects/myprojectname'
        restart: always
        working_dir: /project
        image: gcr.io/base-project/mainmyoh:v1
        command: 'init myprojectname'

    secondim:
        image: gcr.io/base-project/myoh:v1
        working_dir: /project
        volumes:
          - 'my-project-volume:/projects'
        ports:
          - 3000:3000

volumes:
    my-project-volume:

另外,只是一个观察:在您的示例中,working_dir: 引用/project,而卷指向/projects。我认为这是一个错字,这可能是您想要修复的问题。

【讨论】:

    【解决方案2】:

    您可以构建一个自定义映像,为您完成所需的设置。当secondim 运行时,您希望当前工作目录为/project,您希望当前目录的代码嵌入其中,并且您希望init 命令已经运行。这在 Dockerfile 语法中很容易表达:

    FROM gcr.io/base-project/mainmyoh:v1
    WORKDIR /project
    COPY . .
    RUN init myprojectname
    CMD whatever should be run to start the real project
    

    然后你可以告诉 Compose 为你构建它:

    version: '3.5'
    services:
      # no build-only first image
      secondim:
        build: .
        image: gcr.io/base-project/mainmyoh:v1
        ports:
          - '3000:3000'
    

    another question 中,您询问有关在 Kubernetes 中运行类似设置的问题。这种基于 Dockerfile 的设置可以直接转换为 Kubernetes 部署/服务,而无需担心“我需要使用哪种卷”或“如何将代码与镜像分开复制到集群中”之类的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多