Invalid JSON in `CMD` is rewritten to exec form

Open Beginner friendly
#79 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
76/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
docker, go
Domain
tooling

Research direction

Start by locating the CMD handling and JSON argument parsing in the Go source, then read the tests for CMD formatting. Reproduce the case with CMD ["a",] and check that formatting leaves it unchanged when the arguments are not a valid JSON array. Add a regression test and confirm it passes with the project’s test suite.

Written by the indexing model from the issue text.

Description

CMD with an argument list that is not valid JSON gets wrapped into exec form. Docker treats such a line as shell form, so the rewrite changes the command the container runs.

Reproduce
FROM scratch
CMD ["a",]
dockerfmt Dockerfile
Actual
FROM scratch
CMD ["[\"a\",]"]

BuildKit's parser (v0.33.0) reads the original as shell form (/bin/sh -c '["a",]'). The output is exec form that runs a binary literally named ["a",].

Expected

Leave arguments that do not parse as a JSON array unchanged, as Docker does.

Reproduced with v0.5.4 and with main at a5868c2.

Dominant language
Go
Stars
626
Forks
23
Avg merge
6d 23h
Merged PRs (30d)
3

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from reteps/dockerfmt

All issues in reteps/dockerfmt

Similar issues

More Go issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.