简体   繁体   English

Skaffold 和 create-react-app 停止工作

[英]Skaffold and create-react-app stopped working

Been working fine for months and quit working two days ago.几个月来一直工作正常,两天前就辞职了。 Don't recall changing anything in the .yamls .不记得更改.yamls任何.yamls

Basically, when I start up the create-react-app , the create-react-app client just starts, fails and restarts.基本上,当我启动create-react-appcreate-react-app客户端会启动、失败并重新启动。

I've tried:我试过了:

  • Reverting to a previous commit when it was working在工作时恢复到以前的提交
  • Downgrading/upgrading skaffold降级/升级skaffold
  • Downgrading/upgrading minikube降级/升级minikube
  • Downgrading/upgrading kubectl降级/升级kubectl
  • Testing Ubuntu 19.10, macOS 10.15.3, and Windows 10 (WSL2) and the issue persists in all of them测试 Ubuntu 19.10、macOS 10.15.3 和 Windows 10 (WSL2),问题仍然存在

It appears to be an issue with skaffold and create-react-app as the following still works fine:这似乎是skaffoldcreate-react-app的问题,因为以下仍然可以正常工作:

  • The api and postgres pods still launch and run perfectly fine apipostgres pod 仍然可以正常启动和运行
  • The following works normally which, to me, indicates it isn't a create-react-app issue:以下正常工作,对我来说,这表明它不是create-react-app问题:
cd client
npm install
npm start
  • The following also works normally which, to me, indicates it isn't a docker issue:以下也正常工作,对我来说,这表明这不是docker问题:
cd client
docker build -f Dockerfile.dev .
docker run -it -p 3000:3000 <image_id>
  • I don't think it is a Kubernetes issue.我不认为这是 Kubernetes 的问题。 I pushed to my staging branch, triggering the staging CI/CD pipeline, passed build and deployment, and it is operating normally at my staging URL.我推送到我的登台分支,触发登台 CI/CD 管道,通过构建和部署,它在我的登台 URL 上正常运行。

This is what I have for the configs:这是我的配置:

# client.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-deployment-dev
spec:
  replicas: 1
  selector:
    matchLabels:
      component: client
  template:
    metadata:
      labels:
        component: client
    spec:
      containers:
        - name: client
          image: client
          ports:
            - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: client-cluster-ip-service-dev
spec:
  type: ClusterIP
  selector:
    component: client
  ports:
    - port: 3000
      targetPort: 3000
#skaffold.yaml

apiVersion: skaffold/v1beta15
kind: Config
build:
  local:
    push: false
  artifacts:
    - image: client
      context: client
      docker:
        dockerfile: Dockerfile.dev
      sync:
        manual:
          - src: "***/*.js"
            dest: .
          - src: "***/*.jsx"
            dest: .
          - src: "***/*.json"
            dest: .
          - src: "***/*.html"
            dest: .
          - src: "***/*.css"
            dest: .
          - src: "***/*.scss"
            dest: .
deploy:
  kubectl:
    manifests:
      - manifests/dev/client.yaml
# Dockerfile.dev

FROM node:13-alpine
WORKDIR /app
COPY ./package.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]

-v DEBUG log: -v DEBUG日志:

 $ skaffold dev -v DEBUG
INFO[0000] starting gRPC server on port 50051           
INFO[0000] starting gRPC HTTP server on port 50052      
INFO[0000] Skaffold &{Version:v1.6.0-docs ConfigVersion:skaffold/v2beta1 GitVersion: GitCommit:b74e2f94f628b16a866abddc2ba8f05ce0bf956c GitTreeState:clean BuildDate:2020-03-25T00:09:12Z GoVersion:go1.14 Compiler:gc Platform:linux/amd64} 
DEBU[0000] config version (skaffold/v1beta15) out of date: upgrading to latest (skaffold/v2beta1) 
DEBU[0000] validating yamltags of struct SkaffoldConfig 
DEBU[0000] validating yamltags of struct Metadata       
DEBU[0000] validating yamltags of struct Pipeline       
DEBU[0000] validating yamltags of struct BuildConfig    
DEBU[0000] validating yamltags of struct Artifact       
DEBU[0000] validating yamltags of struct Sync           
DEBU[0000] validating yamltags of struct SyncRule       
DEBU[0000] validating yamltags of struct SyncRule       
DEBU[0000] validating yamltags of struct SyncRule       
DEBU[0000] validating yamltags of struct SyncRule       
DEBU[0000] validating yamltags of struct SyncRule       
DEBU[0000] validating yamltags of struct SyncRule       
DEBU[0000] validating yamltags of struct ArtifactType   
DEBU[0000] validating yamltags of struct DockerArtifact 
DEBU[0000] validating yamltags of struct TagPolicy      
DEBU[0000] validating yamltags of struct GitTagger      
DEBU[0000] validating yamltags of struct BuildType      
DEBU[0000] validating yamltags of struct LocalBuild     
DEBU[0000] validating yamltags of struct DeployConfig   
DEBU[0000] validating yamltags of struct DeployType     
DEBU[0000] validating yamltags of struct KubectlDeploy  
DEBU[0000] validating yamltags of struct KubectlFlags   
INFO[0000] Using kubectl context: minikube              
DEBU[0000] Using builder: local                         
DEBU[0000] Running command: [minikube docker-env --shell none] 
DEBU[0000] Command output: [DOCKER_TLS_VERIFY=1
DOCKER_HOST=tcp://192.168.39.184:2376
DOCKER_CERT_PATH=/home/eoxdev/.minikube/certs
MINIKUBE_ACTIVE_DOCKERD=minikube
] 
DEBU[0000] setting Docker user agent to skaffold-v1.6.0-docs 
Listing files to watch...
 - client
DEBU[0000] Found dependencies for dockerfile: [{package.json /app true} {. /app true}] 
DEBU[0000] Skipping excluded path: node_modules         
INFO[0000] List generated in 1.684217ms                 
Generating tags...
 - client -> DEBU[0000] Running command: [git describe --tags --always] 
DEBU[0000] Command output: [3403aa6
]                   
DEBU[0000] Running command: [git status . --porcelain]  
DEBU[0000] Command output: []                           
client:3403aa6
INFO[0000] Tags generated in 3.085635ms                 
Checking cache...
DEBU[0000] Found dependencies for dockerfile: [{package.json /app true} {. /app true}] 
DEBU[0000] Skipping excluded path: node_modules         
 - client: Found Locally
INFO[0000] Cache check complete in 6.098469ms           
Tags used in deployment:
 - client -> client:1319b715976becb303bd077717e754e52beaef72d44c7b09f5b6835b1afacae2
   local images can't be referenced by digest. They are tagged and referenced by a unique ID instead
Starting deploy...
DEBU[0000] Running command: [kubectl version --client -ojson] 
DEBU[0000] Command output: [{
  "clientVersion": {
    "major": "1",
    "minor": "18",
    "gitVersion": "v1.18.0",
    "gitCommit": "9e991415386e4cf155a24b1da15becaa390438d8",
    "gitTreeState": "clean",
    "buildDate": "2020-03-25T14:58:59Z",
    "goVersion": "go1.13.8",
    "compiler": "gc",
    "platform": "linux/amd64"
  }
}
] 
DEBU[0000] Running command: [kubectl --context minikube create --dry-run -oyaml -f /home/eoxdev/Projects/issues/skaffold-cra-error/manifests/dev/client.yaml] 
DEBU[0000] Command output: [apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-deployment-dev
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      component: client
  template:
    metadata:
      labels:
        component: client
    spec:
      containers:
      - image: client
        name: client
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: client-cluster-ip-service-dev
  namespace: default
spec:
  ports:
  - port: 3000
    targetPort: 3000
  selector:
    component: client
  type: ClusterIP
], stderr: W0327 08:49:50.543847   16516 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client. 
DEBU[0000] manifests with tagged images: apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-deployment-dev
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      component: client
  template:
    metadata:
      labels:
        component: client
    spec:
      containers:
      - image: client:1319b715976becb303bd077717e754e52beaef72d44c7b09f5b6835b1afacae2
        name: client
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: client-cluster-ip-service-dev
  namespace: default
spec:
  ports:
  - port: 3000
    targetPort: 3000
  selector:
    component: client
  type: ClusterIP 
DEBU[0000] manifests with labels apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/managed-by: skaffold-v1.6.0-docs
    skaffold.dev/builder: local
    skaffold.dev/cleanup: "true"
    skaffold.dev/deployer: kubectl
    skaffold.dev/docker-api-version: "1.40"
    skaffold.dev/run-id: 2ee04f07-3f07-4e75-bdba-dfac76d18bf0
    skaffold.dev/tag-policy: git-commit
    skaffold.dev/tail: "true"
  name: client-deployment-dev
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      component: client
  template:
    metadata:
      labels:
        app.kubernetes.io/managed-by: skaffold-v1.6.0-docs
        component: client
        skaffold.dev/builder: local
        skaffold.dev/cleanup: "true"
        skaffold.dev/deployer: kubectl
        skaffold.dev/docker-api-version: "1.40"
        skaffold.dev/run-id: 2ee04f07-3f07-4e75-bdba-dfac76d18bf0
        skaffold.dev/tag-policy: git-commit
        skaffold.dev/tail: "true"
    spec:
      containers:
      - image: client:1319b715976becb303bd077717e754e52beaef72d44c7b09f5b6835b1afacae2
        name: client
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/managed-by: skaffold-v1.6.0-docs
    skaffold.dev/builder: local
    skaffold.dev/cleanup: "true"
    skaffold.dev/deployer: kubectl
    skaffold.dev/docker-api-version: "1.40"
    skaffold.dev/run-id: 2ee04f07-3f07-4e75-bdba-dfac76d18bf0
    skaffold.dev/tag-policy: git-commit
    skaffold.dev/tail: "true"
  name: client-cluster-ip-service-dev
  namespace: default
spec:
  ports:
  - port: 3000
    targetPort: 3000
  selector:
    component: client
  type: ClusterIP 
DEBU[0000] 2 manifests to deploy. 2 are updated or new  
DEBU[0000] Running command: [kubectl --context minikube apply -f - --force --grace-period=0] 
 - deployment.apps/client-deployment-dev created
 - service/client-cluster-ip-service-dev created
INFO[0000] Deploy complete in 391.276171ms              
Waiting for deployments to stabilize
DEBU[0000] getting client config for kubeContext: ``    
DEBU[0000] checking status default:deployment/client-deployment-dev 
DEBU[0000] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
DEBU[0000] Command output: [Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
] 
DEBU[0001] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
 - default:deployment/client-deployment-dev Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
DEBU[0001] Command output: [Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
] 
DEBU[0001] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
DEBU[0001] Command output: [Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
] 
DEBU[0001] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
DEBU[0001] Command output: [Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
] 
DEBU[0001] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
DEBU[0001] Command output: [Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
] 
DEBU[0002] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
DEBU[0002] Command output: [Waiting for deployment "client-deployment-dev" rollout to finish: 0 of 1 updated replicas are available...
] 
DEBU[0002] Running command: [kubectl --context minikube rollout status deployment client-deployment-dev --namespace default --watch=false] 
DEBU[0002] Command output: [deployment "client-deployment-dev" successfully rolled out
] 
 - default:deployment/client-deployment-dev is ready.
Deployments stabilized in 1.818029816s
DEBU[0002] getting client config for kubeContext: ``    
INFO[0002] Streaming logs from pod: client-deployment-dev-58bdbf5664-fcc7k container: client 
DEBU[0002] Running command: [kubectl --context minikube logs --since=3s -f client-deployment-dev-58bdbf5664-fcc7k -c client --namespace default] 
[client-deployment-dev-58bdbf5664-fcc7k client] 
[client-deployment-dev-58bdbf5664-fcc7k client] > client@0.1.0 start /app
[client-deployment-dev-58bdbf5664-fcc7k client] > react-scripts start
[client-deployment-dev-58bdbf5664-fcc7k client] 
DEBU[0002] Found dependencies for dockerfile: [{package.json /app true} {. /app true}] 
DEBU[0002] Change detected <nil>                        
DEBU[0002] Skipping excluded path: node_modules         
Watching for changes...
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: Project is running at http://172.17.0.8/
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: webpack output is served from 
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: Content not from webpack is served from /app/public
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: 404s will fallback to /
[client-deployment-dev-58bdbf5664-fcc7k client] Starting the development server...
[client-deployment-dev-58bdbf5664-fcc7k client] 
DEBU[0003] Found dependencies for dockerfile: [{package.json /app true} {. /app true}] 
DEBU[0003] Skipping excluded path: node_modules         
INFO[0004] Streaming logs from pod: client-deployment-dev-58bdbf5664-fcc7k container: client 
DEBU[0004] Running command: [kubectl --context minikube logs --since=4s -f client-deployment-dev-58bdbf5664-fcc7k -c client --namespace default] 
[client-deployment-dev-58bdbf5664-fcc7k client] 
[client-deployment-dev-58bdbf5664-fcc7k client] > client@0.1.0 start /app
[client-deployment-dev-58bdbf5664-fcc7k client] > react-scripts start
[client-deployment-dev-58bdbf5664-fcc7k client] 
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: Project is running at http://172.17.0.8/
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: webpack output is served from 
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: Content not from webpack is served from /app/public
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: 404s will fallback to /
[client-deployment-dev-58bdbf5664-fcc7k client] Starting the development server...
[client-deployment-dev-58bdbf5664-fcc7k client] 
INFO[0019] Streaming logs from pod: client-deployment-dev-58bdbf5664-fcc7k container: client 
DEBU[0019] Running command: [kubectl --context minikube logs --since=20s -f client-deployment-dev-58bdbf5664-fcc7k -c client --namespace default] 
[client-deployment-dev-58bdbf5664-fcc7k client] 
[client-deployment-dev-58bdbf5664-fcc7k client] > client@0.1.0 start /app
[client-deployment-dev-58bdbf5664-fcc7k client] > react-scripts start
[client-deployment-dev-58bdbf5664-fcc7k client] 
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: Project is running at http://172.17.0.8/
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: webpack output is served from 
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: Content not from webpack is served from /app/public
[client-deployment-dev-58bdbf5664-fcc7k client] ℹ 「wds」: 404s will fallback to /
[client-deployment-dev-58bdbf5664-fcc7k client] Starting the development server...
[client-deployment-dev-58bdbf5664-fcc7k client] 
^CCleaning up...
DEBU[0021] Running command: [kubectl --context minikube create --dry-run -oyaml -f /home/eoxdev/Projects/issues/skaffold-cra-error/manifests/dev/client.yaml] 
DEBU[0021] Command output: [apiVersion: apps/v1
kind: Deployment
metadata:
  name: client-deployment-dev
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      component: client
  template:
    metadata:
      labels:
        component: client
    spec:
      containers:
      - image: client
        name: client
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: client-cluster-ip-service-dev
  namespace: default
spec:
  ports:
  - port: 3000
    targetPort: 3000
  selector:
    component: client
  type: ClusterIP
], stderr: W0327 08:50:11.709935   16770 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client. 
DEBU[0021] Running command: [kubectl --context minikube delete --ignore-not-found=true -f -] 
 - deployment.apps "client-deployment-dev" deleted
 - service "client-cluster-ip-service-dev" deleted
INFO[0021] Cleanup complete in 187.851194ms  

I have a test repo here you can try if you'd like:我在这里有一个测试仓库,如果您愿意,可以尝试:

https://github.com/eox-dev/skaffold-cra-error https://github.com/eox-dev/skaffold-cra-error

Hopefully this is something I'm just overlooking, but like I've said, I've reverted the app back to when I know it was working and the issue still persists.希望这是我刚刚忽略的事情,但就像我说过的那样,当我知道它可以正常工作并且问题仍然存在时,我已经将应用程序恢复到。

EDIT 4/1 Was hopeful when I read this in the v1.6.0-docs release notes:编辑 4/1当我在v1.6.0-docs发行说明中阅读此内容时,我充满希望:

Note: This release comes with a new config version v2beta1 .注意:此版本带有新的配置版本v2beta1 To upgrade your skaffold.yaml , use skaffold fix .要升级skaffold.yaml ,请使用skaffold fix If you choose not to upgrade, skaffold will auto-upgrade as best as it can.如果您选择不升级, skaffold将尽可能自动升级。

Still having the same issue, however.然而,仍然有同样的问题。

This is due to a change in facebook/create-react-app , specifically #8739 and #8688 .这是由于facebook/create-react-app 的变化,特别是#8739#8688 You'll notice that your container immediately exits from docker if you run without allocating a TTY:您会注意到,如果您在不分配 TTY 的情况下运行,您的容器会立即从 docker 退出:

$ docker run --rm client; echo ">> $?"

> client@0.1.0 start /app
> react-scripts start

ℹ 「wds」: Project is running at http://172.17.0.4/
ℹ 「wds」: webpack output is served from 
ℹ 「wds」: Content not from webpack is served from /app/public
ℹ 「wds」: 404s will fallback to /
Starting the development server...

>> 0

There is a workaround posted to the issue, to set CI=true in your Dockerfile:有一个解决方法发布到该问题,以在您的 Dockerfile 中设置CI=true

--- client/Dockerfile.dev
+++ client/Dockerfile.dev
@@ -1,6 +1,7 @@
 FROM node:13-alpine
 WORKDIR /app
 COPY ./package.json ./
+ENV CI=true
 RUN npm install
 COPY . .
    $ docker run --rm client; echo ">> $?"

> client@0.1.0 start /app
> react-scripts start

ℹ 「wds」: Project is running at http://172.17.0.4/
ℹ 「wds」: webpack output is served from 
ℹ 「wds」: Content not from webpack is served from /app/public
ℹ 「wds」: 404s will fallback to /
Starting the development server...

>> 0

and then this然后这个

--- client/Dockerfile.dev
+++ client/Dockerfile.dev
@@ -1,6 +1,7 @@
 FROM node:13-alpine
 WORKDIR /app
 COPY ./package.json ./
+ENV CI=true
 RUN npm install
 COPY . .

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM