Docker Linux Mounted代码是RO

时间:2018-06-17 18:40:01

标签: docker docker-compose

我有以下docker-compose.yml文件来构建我的2项服务。它启动并运行完美。问题是,如果我在容器中执行一个ember命令,它会创建文件但是当我在VS代码中编辑它们并点击保存时,我会被拒绝许可。我怎样才能解决这个问题?

version: '3'

volumes:
  ember-bower_components:
  ember-node_modules:

services:
  ember:
    build: .
    container_name: cf2-ember
    ports:
      - 7357:7357
      - 4200:4200
      - 9222:9222
      - 49152:49152
    volumes:
      - .:/myapp
      - ember-bower_components:/myapp/bower_components
      - ember-node_modules:/myapp/node_modules
      - ./docker/entrypoint.sh:/entrypoint.sh
    tmpfs:
      - /myapp/tmp
    environment:
      - APIM_HOST=CHANGEME
      - APIM_SUBSCRIPTION_KEY=CHANGEME
    command: ["sh", "/entrypoint.sh"]
  nginx:
    image: nginx:1.12.1-alpine
    container_name: cf2-nginx
    ports:
      - 8081:8080
    depends_on:
      - ember
    volumes:
      - ./docker/default.template:/etc/nginx/conf.d/default.template
      - ./dist:/usr/share/nginx/html:delegated
    environment:
      - SERVER_NAME=localhost
    command: /bin/sh -c "envsubst < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"

2 个答案:

答案 0 :(得分:1)

几个月前我发现了这个伎俩:

docker run -u `id -u`:`id -g` <image name>

或者在您的情况下使用docker-compose

docker-compose run -u `id -u`:`id -g` <service name>

这使我能够以当前用户的身份在已安装卷上的容器内生成文件,而无需事后chown

使用-u标志可以指定user:group来运行容器。

https://docs.docker.com/engine/reference/run/#user

答案 1 :(得分:0)

如果您不想以root用户以外的其他用户身份运行容器,则始终可以在目录上设置默认ACL,以便仍然可以访问文件。

在Linux上,它将与:

$ setfacl -Rdm u:myusername:rw ./dist