V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Er1c0
V2EX  ›  问与答

docker 打前端镜像时,执行 dockerfile 文件,前端 npm run build 失败时怎么进容器看 npm 日志

  •  
  •   Er1c0 · 2022-06-13 11:04:21 +08:00 · 1600 次点击
    这是一个创建于 887 天前的主题,其中的信息可能已经有所发展或是发生改变。

    docker 打前端镜像时,执行 dockerfile 文件,前端 npm run build 失败时, 怎么进容器看 /root/.npm/_logs/2022-06-13T02_42_11_657Z-debug.log 日志

    此时容器运行不起了,也进去不

    [root@VM-4-7-centos]# docker exec -it great_rubin /bin/bash Error response from daemon: Container 9b6a76 is not running

    15 条回复    2022-06-14 11:36:59 +08:00
    dcsuibian
        1
    dcsuibian  
       2022-06-13 11:09:19 +08:00
    不应该是宿主机上 build 好然后 COPY 进去的吗?
    GiantHard
        2
    GiantHard  
       2022-06-13 11:09:41 +08:00   ❤️ 3
    xiancai
        3
    xiancai  
       2022-06-13 11:15:26 +08:00
    编写一个 shell 脚本,在 build.sh 内执行 npm , 然后 sleep 1000 这样 sh 没有退出时,容器也不会被重启
    dzdh
        4
    dzdh  
       2022-06-13 11:16:16 +08:00
    @dcsuibian 那不污染宿主机了吗
    c1273082756
        5
    c1273082756  
       2022-06-13 11:21:01 +08:00
    @dzdh 我也觉得是 build 好之后 copy 进去, 因为配置好.gitignore 文件就不存在污染宿主机的这种情况吧
    dzdh
        6
    dzdh  
       2022-06-13 11:35:30 +08:00
    @c1273082756

    .gitignore 是 git commit 时才有用的吧。 我说污染宿主机的意思是,万一你用的哪个包执行了个 install --global 的命令或者 rm 啥东西 这不知道啊。

    分阶段构建

    from x as build

    run ..

    copy --from=build build/* ./var/www

    不更好吗
    c1273082756
        7
    c1273082756  
       2022-06-13 11:39:18 +08:00
    @dzdh 你说得有道理, 学习了, 以后 copy 进去再 build
    dzdh
        8
    dzdh  
       2022-06-13 11:46:26 +08:00
    @c1273082756 但是副作用每次都会全量下载一次依赖包。。。如果真的有哪个包依赖个什么全局命令你又不知道,就 GG 。

    但是我觉得能更好的掌握所有包的依赖情况(尤其是依赖系统命令)也算学习吧。
    dcsuibian
        9
    dcsuibian  
       2022-06-13 13:30:19 +08:00
    @c1273082756 你这是,怕 npm 供应链投毒?
    理解,但我总体上来说还是比较相信那些依赖库的。(虽然 npm 的安全事故确实挺多)

    还有是开发的时候怎么办呢,npm serve/dev/start 的时候不也得在宿主机里装好依赖么?
    binhb
        10
    binhb  
       2022-06-13 13:34:39 +08:00 via iPhone
    docker 构建失败,我都是开一个新的交互式容器,手动执行命令
    Thtdmo
        11
    Thtdmo  
       2022-06-13 14:43:08 +08:00
    docker ps -a 可以看到一个随机名称的退出的容器就是 build 的容器可以 exec -it /bin/bash 的形式进去查看日志
    Er1c0
        12
    Er1c0  
    OP
       2022-06-13 15:32:00 +08:00
    @Thtdmo 进不去
    docker exec -it great_rubin /bin/bash
    报错 Error response from daemon: Container 9b6a76 is not running
    kapr1k0rn
        13
    kapr1k0rn  
       2022-06-13 20:41:15 +08:00 via iPhone
    把 log 文件临时挂到 host 的目录?
    freevioce
        14
    freevioce  
       2022-06-14 09:50:55 +08:00
    我一般做法是找到最近临时创建层的镜像 docker images -a ,把它 run 成容器,在里面执行失败的命令
    dier
        15
    dier  
       2022-06-14 11:36:59 +08:00
    构建过程会正常打印出日志信息呀,难道你构建的时候没有任何信息输出吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2558 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:37 · PVG 10:37 · LAX 18:37 · JFK 21:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.