如何为多个Docker服务使用共享卷

rhfm7lfc  于 2023-04-05  发布在  Docker
关注(0)|答案(2)|浏览(112)

我尝试使用共享的外部卷(状态)为docker组成的四个服务。然而,我注意到由于某种原因,我的状态没有被存储。下面是我的docker-compose.yml文件。

version: "3"

services:
  plus:
    build: ./addition
    image: plus_image
    volumes:
      - state:/state
  minus:
    build: ./subtraction
    image: minus_image
    volumes:
      - state:/state
  multiply:
    build: ./multiplication
    image: multiply_image
    volumes:
      - state:/state
  divide:
    build: ./division
    image: divide_image
    volumes:
      - state:/state

volumes:
  state:
    external: true

下面是添加应用程序的代码

import sys, os

STATE_DIR = './state'

def add(op1, op2):
    result = op1 + op2
    return result

def getOperand():
    value = 0
    if os.path.exists(STATE_DIR + '/value'):
        print('exits')
        with open(STATE_DIR + '/value', 'r') as f:
            if f.readable():
                value = int(f.read().strip())
    print(value)
    return value

def save(value):
    print('saivng')
    if(not os.path.exists(STATE_DIR)):
        os.makedirs(STATE_DIR)
    with open(STATE_DIR + '/value', 'w') as f:
        f.write(str(value))

if __name__ == '__main__':
    numArgs = len(sys.argv)
    if(numArgs == 2):
        try:
            op1 = getOperand()
            op2 = int(sys.argv[1])
        except:
            print('Invalid input!')
            exit(1)
    else:
        print('Usage: python3 <operation>.py op1')
        exit(1)
    result = add(op1,op2)
    save(result)
    print(result)

跑步

docker run plus_image 10

在第一次运行时应该输出10。
再次运行相同的命令,它必须打印20(10来自input + 10来自卷)
此项目的目录结构

.
 |-division
 | |-division.py
 | |-Dockerfile
 |-subtraction
 | |-Dockerfile
 | |-subtraction.py
 |-multiplication
 | |-Dockerfile
 | |-multiplication.py
 |-addition
 | |-Dockerfile
 | |-addition.py
 |-docker-compose.yml

如果你遇到这样的问题,请帮忙。非常感谢!

68bkxrlz

68bkxrlz1#

尝试

docker-compose run plus 10

按命令

docker run plus_image 10

你从image plus_image运行container,而不使用compose file
通过

docker-compose run plus

你从你的合成文件运行service plus(witch use image plus_image)

h6my8fg2

h6my8fg22#

使用绝对路径而不是相对路径:

STATE_DIR = '/state'

否则,如果要使用相对路径,请验证Dockerfile中使用的WORKDIR,然后将共享卷挂载到正确的文件夹中

相关问题