Run failed on Ubuntu 22.04, arch amd64
Finding your help on the error while I'm trying to play around with c2w. I'm converting my simple Python container.
I'm using lima to run my VM:
uname -a
Linux lima-ubuntu 5.15.0-56-generic #62-Ubuntu SMP Tue Nov 22 19:54:14 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
My docker file to build Python image, this is a simple script print Hello world:
FROM python:3
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY test.py .
COPY . .
CMD ["python", "test.py"]
I run ./c2w --target-arch=amd64 test-py /tmp/out/python.wasm and there's log:
#63 54.56 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-2.a have the same Joliet name
#63 54.57 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecore-api-ms-win-core-processtopology-obsolete-l1-1-0.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecore-api-ms-win-core-processtopology-obsolete-l1-1-1.a have the same Joliet name
#63 54.58 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-2.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-0.a have the same Joliet name
#63 54.58 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-0.a have the same Joliet name
#63 54.58 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-2.a have the same Joliet name
#63 54.60 Joliet tree sort failed. The -joliet-long switch may help you.
#63 ERROR: process "/bin/sh -c mkdir /out/ && mkisofs -l -J -r -o /out/rootfs.bin /rootfs/" did not complete successfully: exit code: 1
#25 [tinyemu-dev-common 6/11] RUN git clone https://github.com/kateinoigakukun/wasi-vfs.git --recurse-submodules && cd wasi-vfs && git checkout "ddbea0e2a6a1e0e8fe0373ec3d1bdccf522178ab" && cargo build --target wasm32-unknown-unknown && cargo build --package wasi-vfs-cli && mkdir -p /tools/wasi-vfs/ && mv target/debug/wasi-vfs target/wasm32-unknown-unknown/debug/libwasi_vfs.a /tools/wasi-vfs/ && cargo clean
#25 CANCELED
------
> [rootfs-dev 12/12] RUN mkdir /out/ && mkisofs -l -J -r -o /out/rootfs.bin /rootfs/:
#63 53.28 Using SYS000;1 for /rootfs/oci/rootfs/usr/lib/x86_64-linux-gnu/perl/5.32.1/Sys (sys)
#63 54.55 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-0.a have the same Joliet name
#63 54.56 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-processtopology-obsolete-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-processtopology-obsolete-l1-1-0.a have the same Joliet name
#63 54.56 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-0.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-2.a have the same Joliet name
#63 54.56 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-2.a have the same Joliet name
#63 54.57 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecore-api-ms-win-core-processtopology-obsolete-l1-1-0.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecore-api-ms-win-core-processtopology-obsolete-l1-1-1.a have the same Joliet name
#63 54.58 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-2.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-0.a have the same Joliet name
#63 54.58 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-0.a have the same Joliet name
#63 54.58 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-2.a have the same Joliet name
#63 54.60 Joliet tree sort failed. The -joliet-long switch may help you.
------
Dockerfile:185
--------------------
183 | RUN mkdir -p /rootfs/proc /rootfs/sys /rootfs/mnt /rootfs/run /rootfs/tmp /rootfs/dev /rootfs/var && mknod /rootfs/dev/null c 1 3 && chmod 666 /rootfs/dev/null
184 | RUN touch /rootfs/etc/resolv.conf /rootfs/etc/hosts
185 | >>> RUN mkdir /out/ && mkisofs -l -J -r -o /out/rootfs.bin /rootfs/
186 | # RUN isoinfo -i /out/rootfs.bin -l
187 |
--------------------
ERROR: failed to solve: process "/bin/sh -c mkdir /out/ && mkisofs -l -J -r -o /out/rootfs.bin /rootfs/" did not complete successfully: exit code: 1
exit status 1
Thank you for your time of reading.
Could you provide a full reproducer? Does the conversion work for other Dockerfiles? And I'm curious why COPY . . is included in the Dockerfile. It looks like COPY requirements.txt . and COPY test.py . add necessary files to the image.
This is the directory content. I should remove COPY . . for sure
- Build and run
Dockerfile
docker build -t test-py .
[+] Building 26.6s (10/10) FINISHED
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 185B 0.1s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.1s
=> [internal] load metadata for docker.io/library/python:3 3.4s
=> [internal] load build context 22.8s
=> => transferring context: 61B 22.7s
=> [1/5] FROM docker.io/library/python:3@sha256:6b8d0fbaf8b4e8fc56864ccc4d496ea0cd2abff6526e3f7f8ab171d696a05b69 0.1s
=> => resolve docker.io/library/python:3@sha256:6b8d0fbaf8b4e8fc56864ccc4d496ea0cd2abff6526e3f7f8ab171d696a05b69 0.0s
=> CACHED [2/5] WORKDIR /app 0.0s
=> CACHED [3/5] COPY requirements.txt . 0.0s
=> CACHED [4/5] RUN pip install --no-cache-dir -r requirements.txt 0.0s
=> CACHED [5/5] COPY test.py . 0.0s
=> exporting to image 0.1s
=> => exporting layers 0.0s
=> => writing image sha256:beaba1659c7583dd3291411c6c0c392b72d6a244e08403c2cae1bf5121de1ac7 0.0s
=> => naming to docker.io/library/test-py 0.0s
trannguyen@lima-ubuntu:~$ docker run test-py
Hello, World!
What is the contents of requirements.txt?
its an empty file
@NoahJinnn I can't reproduce the issue. The conversion seems to work on my side. Added the log at the following (used container2wasm v0.2.3). What error are you getting after removing COPY . . from your Dockerfile? And what's version of container2wasm are you using?
$ tree /tmp/testctx/
/tmp/testctx
├── Dockerfile
├── requirements.txt
└── test.py
$ cat /tmp/testctx/Dockerfile
FROM python:3
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY test.py .
CMD ["python", "test.py"]
$ cat /tmp/testctx/test.py
print("Hello, world");
$ docker build -t test-py /tmp/testctx/
$ c2w --target-arch=amd64 test-py /tmp/out/python.wasm
(conversion succeeds without error)
@ktock I run again without COPY . ., this time it gives a different error:
Notes: I'm using a M1 arm chipset and running c2w inside lima VM. The c2w release i'm using:
trannguyen@lima-ubuntu:~$ file c2w
c2w: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=4g8eKYT0twbdQWLFNkjA/QWyEChM_OsT7NgRBLLfx/WU_ZTf9OFFfut8x4ReoR/GHrPNf5dq3PSkOOWGFTL, stripped
Error logs:
#92 40.72 /sbin/runc
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 2224/2224
#92 50.38 /sbin/init
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 512/512
#92 50.53
#92 50.53 Files: 2
#92 50.53 Directories: 0
#92 50.54 Touched Pages: 2736 (10M)
#92 50.54 Elapsed: 9.8696 seconds
#92 DONE 70.2s
#93 [tinyemu-dev-wizer 3/3] RUN mkdir /minpack && cp /pack/rootfs.bin /minpack/
#93 DONE 10.0s
#94 [tinyemu-dev-packed 1/1] RUN /tools/wasi-vfs/wasi-vfs pack /tinyemu/temu --mapdir /pack::/minpack -o packed && mkdir /out && mv packed /out/python.wasm
#94 280.9 Killed
#94 ERROR: process "/bin/sh -c /tools/wasi-vfs/wasi-vfs pack /tinyemu/temu --mapdir /pack::/minpack -o packed && mkdir /out && mv packed /out/$OUTPUT_NAME" did not complete successfully: exit code: 137
------
> [tinyemu-dev-packed 1/1] RUN /tools/wasi-vfs/wasi-vfs pack /tinyemu/temu --mapdir /pack::/minpack -o packed && mkdir /out && mv packed /out/python.wasm:
#94 280.9 Killed
------
Dockerfile:250
--------------------
248 |
249 | FROM tinyemu-dev-${OPTIMIZATION_MODE} AS tinyemu-dev-packed
250 | >>> RUN /tools/wasi-vfs/wasi-vfs pack /tinyemu/temu --mapdir /pack::/minpack -o packed && mkdir /out && mv packed /out/$OUTPUT_NAME
251 |
252 | FROM emscripten/emsdk:$EMSDK_VERSION AS tinyemu-emscripten
--------------------
ERROR: failed to solve: process "/bin/sh -c /tools/wasi-vfs/wasi-vfs pack /tinyemu/temu --mapdir /pack::/minpack -o packed && mkdir /out && mv packed /out/$OUTPUT_NAME" did not complete successfully: exit code: 137
exit status 1
exit code: 137
I guess it's because of memory usage maybe. Can you check the memory usage? Maybe we can add a way to passthrough some resource-related flags from c2w to docker build.