質問: func(*args, **kwargs) file "/home/evan/downloads/sam-helloworld/venv/lib/python3.7/site-packages/samcli/commands/local/invoke/cli.py", line 58, in cli parameter_overrides) # pragma: no cover file "/home/evan/downloads/sam-helloworld/venv/lib/python3.7/site-packages/samcli/commands/local/invoke/cli.py", line 102, in do_cli stderr=context.stderr) file "/home/evan/downloads/sam-helloworld/venv/lib/python3.7/site-packages/samcli/commands/local/lib/local_lambda.py", line 93, in invoke self.local_runtime.invoke(config, event, debug_context=self.debug_context, stdout=stdout, stderr=stderr) file "/home/evan/downloads/sam-helloworld/venv/lib/python3.7/site-packages/samcli/local/lambdafn/runtime.py", line 86, in invoke self._container_manager.run(container) file "/home/evan/downloads/sam-helloworld/venv/lib/python3.7/site-packages/samcli/local/docker/manager.py", line 98, in run container.start(input_data=input_data) file "/home/evan/downloads/sam-helloworld/venv/lib/python3.7/site-packages/samcli/local/docker/container.py", line 189, in start real_container.start() file "/home/evan/downloads/sam-helloworld/venv/lib/python3.7/site-packages/docker/models/containers.py", line 400, in start return self.client.api.start(self.id, **kwargs) file "/home/evan/downloads/sam-helloworld/venv/lib/python3.7/site-packages/docker/utils/decorators.py", line 19, in wrapped return f(self, resource_id, *args, **kwargs) file "/home/evan/downloads/sam-helloworld/venv/lib/python3.7/site-packages/docker/api/container.py", line 1093, in start self._raise_for_status(res) file "/home/evan/downloads/sam-helloworld/venv/lib/python3.7/site-packages/docker/api/client.py", line 263, in _raise_for_status raise create_api_error_from_http_exception(e) file "/home/evan/downloads/sam-helloworld/venv/lib/python3.7/site-packages/docker/errors.py", line 31, in create_api_error_from_http_exception raise cls(e, response=response, explanation=explanation) docker.errors.apierror: 400 client error: bad request ("oci runtime create failed: container_linux.go:345: starting container process caused "chdir to cwd (\"/var/task\") set in config.json failed: permission denied": unknown") archlinuxを実行しています。 groupsコマンドを使用して、自分がdockerグループに属していることを確認しました(すでに再起動しています)。特に、コマンドdocker run hello-worldとdocker run -it ubuntu /bin/bashは期待どおりに機能するので、この問題は何らかの形でsamに関連していると思います。docker infoを実行すると、次のデータが得られます。client: debug mode: false server: containers: 15 running: 1 paused: 0 stopped: 14 images: 26 server version: 19.03.2-ce storage driver: overlay2 backing filesystem: extfs supports d_type: true native overlay diff: false logging driver: json-file cgroup driver: cgroupfs plugins: volume: local network: bridge host ipvlan macvlan null overlay log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog swarm: inactive runtimes: runc default runtime: runc init binary: docker-init containerd version: d50db0a42053864a270f648048f9a8b4f24eced3.m runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f init version: fec3683 security options: seccomp profile: default kernel version: 5.2.14-arch2-1-arch operating system: arch linux ostype: linux architecture: x86_64 cpus: 4 total memory: 7.651gib name: archscythe id: 7sph:ccqo:g626:gsme:aksj:3pcn:rxng:k3de:5pxo:cdyu:cqfd:4kba docker root dir: /var/lib/docker debug mode: false registry: https://index.docker.io/v1/ labels: experimental: false insecure registries: 127.0.0.0/8 live restore enabled: false 私が試したのは、/var/run/docker.sockの権限の変更、すべてをrootとして実行する(申し訳ありません)、-vフラグをsamに追加する、pipではなくlinuxbrewを介してsamをインストールするなどです。まだ運がない。私が間違っていることについて何か考えはありますか?(これをここに投稿するか、stack overflowに投稿するかはわかりませんでした。モデレーターは、soの方が適切な場合は、自由に移行してください。)
回答: 数時間後---権限の問題であることが判明しました。 awssamは.aws-sam/buildディレクトリをコンテナ内の/var/taskディレクトリにマウントしようとしていますが、ホームディレクトリファイルには次の権限がないため、dockerユーザーにはマウントされたディレクトリを読み取る権限がありません。デフォルトではその他。これを回避するために私は実行しましたfind .aws-sam/build/ -type d -print0 | xargs -0 chmod o+rx find .aws-sam/build/ -type f -print0 | xargs -0 chmod o+r sam buildを実行した後。これによりビルドアーティファクトが公開され、その後、コマンドsam local invoke helloworldfunction --event events/event.jsonが期待どおりに機能します。少なくとも今は仕事に戻ることができますが、これはややハックなので、完全には満足していません。他の誰かが問題に対処するためのより良い方法を見つけ出すことができれば、代わりにその答えを受け入れます。