[英]Why does skaffold build work but not skaffold run or skaffold dev?
我有一个在 docker 容器中运行的本地 NPM/Yarn 存储库“verdaccio”,绑定到我的主机http://0.0.0.0:4873/ 。
我正在用 minikube 试用 skaffold。
我的 Dockerfile 配置需要两个构建参数:
ARG NPM_TOKEN
ARG PACKAGE_REPO_DOMAIN
在 my.yarnrc.yml 文件中使用:
yarnPath: .yarn/releases/yarn-3.2.0.cjs
nodeLinker: "node-modules"
npmRegistryServer: "http://${PACKAGE_REPO_DOMAIN}:4873/"
httpRetry: 10
httpTimeout: 100000
# networkConcurrency: 2
unsafeHttpWhitelist:
- "0.0.0.0"
- localhost
- verdaccio
- host.minikube.internal
- host.docker.internal
npmRegistries:
"http://${PACKAGE_REPO_DOMAIN}:4873":
npmAlwaysAuth: true
npmAuthToken: ${NPM_TOKEN}
配置的域是host.minikube.internal
。 下面是我的 skaffold yaml,注意我将网络绑定到“主机”:
apiVersion: skaffold/v2beta28
kind: Config
build:
local:
push: false
artifacts:
- image: my-app
docker:
dockerfile: ./my-app/Dockerfile
target: dev
network: "host"
buildArgs:
NPM_TOKEN: "***REDACTED***"
PACKAGE_REPO_DOMAIN: "host.minikube.internal"
context: ../
sync:
manual:
- src: 'my-app/**/*.*'
dest: ./my-app
- src: './shared'
dest: './shared'
- src: '.yarn'
dest: '.yarn'
deploy:
helm:
releases:
- name: my-app
chartPath: ../../infrastructure/helm/charts/my-app
artifactOverrides:
image: my-app
imageStrategy:
fqn: {}
当运行skaffold build
时,它可以正常工作并构建图像。 但是,当运行skaffold dev
或skaffold run
时, yarn install
在构建时挂起。 这意味着 yarn 无法到达 verdaccio 本地 npm 存储库。 我不明白为什么 - 它肯定仍在 minikube 环境中构建并且应该使用 host.minikube.internal -> localhost?
注意:我记得在 skaffold 之前也运行过这个(仍然失败):
skaffold config set --global local-cluster true
eval $(minikube -p minikube docker-env)
编辑
从那以后,我在这里进行了最少的复制: https ://github.com/gitn00b1337/skaffold-verdaccio
需要纱线、minikube + helm。
CD进入项目,然后:
$ sudo chmod -R a+rw ./verdaccio/storage
$ yarn install
$ minikube start
$ docker-compose up (seperate terminal)
$ skaffold config set --kube-context minikube local-cluster true
$ eval $(minikube -p minikube docker-env)
$ skaffold build # works
$ skaffold run # fails
在我们的项目中,我们必须执行以下操作才能使 verdaccio 工作:
添加新用户:
npm adduser --registry http://localhost:4873/
使用以下内容在共享模块和导入模块的服务中创建一个.npmrc
文件:
@my-app:registry=http://localhost:4873 strict-ssl=false
使用yarn build && yarn publish
发布共享模块 verdaccio 然后你应该能够在你的浏览器中看到它,如果你导航到
http://localhost:4873
然后使用yarn install <shared-module>
在服务中安装共享模块。
我认为您的设置挂起的原因是它缺少.nmprc
文件或它需要strict-ssl=false
一旦你添加了它,那么希望当你skaffold run
它会部署到 minikube
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.