Dockerfile COPY instruction failing with explicit file reference - docker

If my project structure is like this:
├── compose
│   ├── local
│   │   └── django
│   │   ├── Dockerfile
│   │   ├── celery
│   │   │   ├── beat
│   │   │   │   └── start.sh
│   │   │   └── worker
│   │   │   └── start.sh
│   │   └── start.sh
│   └── production
│   ├── caddy
│   │   ├── Caddyfile
│   │   └── Dockerfile.caddy
│   ├── django
│   │   ├── Dockerfile.django
I am calling from root, $  heroku container:push --recursive
However, build will fail citing COPY fail:
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM abiosoft/caddy:0.10.6
---> d8ff070e1cee
Step 2/2 : COPY ./compose/production/caddy/Caddyfile /etc/Caddyfile
COPY failed: stat /var/lib/docker/tmp/docker-builder022230374/compose/production/caddy/Caddyfile: no such file or directory
▸ Error: docker build exited with 1
The actual Dockerfile:
FROM abiosoft/caddy:0.10.6
COPY ./compose/production/caddy/Caddyfile /etc/Caddyfile
I have read this similar stackoverflow post: Dockerfile COPY instruction failing?
Per the top answer, I did believe I'm referencing the file explicitly at build.
I guess not. What am I missing?

Related

ROS2 colcon build fails - can't copy: doesn't exist or not a regular file

I have a ROS2 package which is failing to build. I'm following the ROS2 "Setting Up a Robot Simulation (Webots)" tutorial, and when I got to section 6 "Modify the setup.py file", I changed my file like so:
from setuptools import setup
from glob import glob
package_name = 'ad_boxtra'
setup(
name=package_name,
version='0.0.0',
packages=[package_name],
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
('share/' + package_name, glob('launch/*.py')), # include all launch files
('share/' + package_name, glob('resource/*.urdf')), # include all webots-related resource files
('share/' + package_name + '/webots_simulation/worlds', # include desired webots worlds
['worlds/adboxtra_2022_simplified.wbt']),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='redacted',
maintainer_email='redacted',
description="redacted",
license='MIT License',
tests_require=['pytest'],
entry_points={
'console_scripts': [
'my_robot_driver = ad_boxtra.my_robot_driver:main',
],
},
)
I then ran colcon build with debug info from the root of my workspace and got:
user#host:~/my_ws $ colcon build --packages-select ad_boxtra --event-handlers console_direct+
Starting >>> ad_boxtra
running egg_info
writing ../../build/ad_boxtra/ad_boxtra.egg-info/PKG-INFO
writing dependency_links to ../../build/ad_boxtra/ad_boxtra.egg-info/dependency_links.txt
writing entry points to ../../build/ad_boxtra/ad_boxtra.egg-info/entry_points.txt
writing requirements to ../../build/ad_boxtra/ad_boxtra.egg-info/requires.txt
writing top-level names to ../../build/ad_boxtra/ad_boxtra.egg-info/top_level.txt
reading manifest file '../../build/ad_boxtra/ad_boxtra.egg-info/SOURCES.txt'
writing manifest file '../../build/ad_boxtra/ad_boxtra.egg-info/SOURCES.txt'
running build
running build_py
running install
running install_lib
running install_data
error: can't copy 'adboxtra_2022_simplified.wbt': doesn't exist or not a regular file
--- stderr: ad_boxtra
error: can't copy 'adboxtra_2022_simplified.wbt': doesn't exist or not a regular file
---
Failed <<< ad_boxtra [0.63s, exited with code 1]
Summary: 0 packages finished [0.70s]
1 package failed: ad_boxtra
1 package had stderr output: ad_boxtra
---
Failed <<< ad_boxtra [0.62s, exited with code 1]
Summary: 0 packages finished [0.71s]
1 package failed: ad_boxtra
1 package had stderr output: ad_boxtra
Why is this colcon build failing? If it helps, here's my directory tree:
AdBoxtra
├── ad_boxtra
│   ├── __init__.py
│   └── my_robot_driver.py
├── launch
│   └── my_robot_webots.launch.py
├── LICENSE
├── package.xml
├── README.md
├── resource
│   ├── ad_boxtra
│   └── my_robot.urdf
├── setup.cfg
├── setup.py
├── test
│   ├── test_copyright.py
│   ├── test_flake8.py
│   └── test_pep257.py
├── urdf
└── webots_simulation
├── controllers
│   └── arm_sweep
│      └── arm_sweep.py
├── libraries
├── plugins
│   ├── physics
│   ├── remote_controls
│   └── robot_windows
├── protos
└── worlds
└── adboxtra_2022_simplified.wbt
27 directories, 63 files
I did observe that in the install/ directory of my workspace, it seems that share/ad_boxtra/webots_simulation/worlds/ exists, but there's no .wbt files inside it. I don't know why this is though:
$ tree ~/rover_ws/install/ad_boxtra/
/home/redacted/rover_ws/install/ad_boxtra/
├── lib
│   ├── ad_boxtra
│   │   ├── conversationalist
│   │   ├── drive_control_serial
│   │   └── turtle_ad_boxtra
│   └── python3.8
│   └── site-packages
│   ├── ad_boxtra
│   │   ├── conversationalist.py
│   │   ├── drive_control_serial.py
│   │   ├── __init__.py
│   │   ├── my_robot_driver.py
│   │   ├── __pycache__
│   │   │   ├── conversationalist.cpython-38.pyc
│   │   │   ├── drive_control_serial.cpython-38.pyc
│   │   │   ├── __init__.cpython-38.pyc
│   │   │   ├── my_robot_driver.cpython-38.pyc
│   │   │   └── turtle_ad_boxtra.cpython-38.pyc
│   │   └── turtle_ad_boxtra.py
│   └── ad_boxtra-0.0.0-py3.8.egg-info
│   ├── dependency_links.txt
│   ├── entry_points.txt
│   ├── PKG-INFO
│   ├── requires.txt
│   ├── SOURCES.txt
│   ├── top_level.txt
│   └── zip-safe
└── share
├── ad_boxtra
│   ├── drive_control.launch.py
│   ├── hook
│   │   ├── ament_prefix_path.dsv
│   │   ├── ament_prefix_path.ps1
│   │   ├── ament_prefix_path.sh
│   │   ├── pythonpath.dsv
│   │   ├── pythonpath.ps1
│   │   └── pythonpath.sh
│   ├── my_robot.urdf
│   ├── my_robot_webots.launch.py
│   ├── package.bash
│   ├── package.dsv
│   ├── package.ps1
│   ├── package.sh
│   ├── package.xml
│   ├── package.zsh
│   ├── __pycache__
│   │   └── drive_control.launch.cpython-38.pyc
│   └── webots_simulation
│   └── worlds
├── ament_index
│   └── resource_index
│   └── packages
│   └── ad_boxtra
└── colcon-core
└── packages
└── ad_boxtra
18 directories, 38 files
From the Python documentation:
data_files specifies a sequence of (directory, files) pairs in the following way...
You wrote
('share/' + package_name + '/webots_simulation/worlds',['worlds/adboxtra_2022_simplified.wbt']), but it should be ('share/' + package_name + '/webots_simulation/worlds',['adboxtra_2022_simplified.wbt']).
You could check the build folder too. Just delete build and install and try again. It could be that.

Remove some class file from all jars packaged in tar(each tar is a layer of a docker image)

OK so I know how to remove class files from all the jars under a dir. But, now I have different layer from a docker image, each layer is a tar file, and in the tar file there are the jar files.
Can I remove the class files from the jar files, packaged in tar files?
$ tree -L 3
.
├── 29e0fb8afe376cb02219c977cba1c9a80cca895f7f17b72c356f3e25a63337b9
│   ├── json
│   ├── layer.tar
│   └── VERSION
├── 3b75d6634da4d4f4932d2affeabb7454dc51ba160c3833b386c34e328da8f0ba
│   ├── amq # <<<<< this layer is extracted already, and you can see all the jars here. Other layers are not
│   │   ├── activemq-all-5.11.0.redhat-630495.jar
│   │   ├── bin
│   │   ├── conf
│   │   ├── data
│   │   ├── docs
│   │   ├── examples
│   │   ├── lib
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── README.txt
│   │   ├── webapps
│   │   └── webapps-demo
│   ├── json
│   ├── layer.tar
│   ├── temp
│   └── VERSION
├── c1fa0e994b2d29f60fd2a6caecbe1ac3f987d001903523d60e532b6e08b094f0
│   ├── json
│   ├── layer.tar
│   └── VERSION
├── c8c84a6c1be5bdfc8caafd23082fd725e84f1c9cddb98fd56cad3a62544b2a3c.json
├── ef5088f89fbac64d2d5982ba14492227f60db1221f6bfd6290c6364a2a95a7e3
│   ├── json
│   ├── layer.tar
│   └── VERSION
├── manifest.json
├── repositories
└── script.sh # <<<<< the script is here
So you ask me why?
Well, did you hear people talking about log4j recently? :) I am doing this right now: log4j vulnerability check: how to quickly detect if log4j is used, in mavevn/in an image? "mvn dependency:tree" does not give a full picture
If someone can tell me how to remove these classes from jib maven plugin, that's better. They are from a base image and I doubt we could do that, though.

Why docker ADD destroys folder structure?

I have the following folder structure:
> tree -L 3
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   └── test
│   ├── groovy
│   └── resources
I tried to build docker image containing those folders together with files using the following Dockerfile:
FROM jamesdbloom/docker-java8-maven
USER root
RUN mkdir src
ADD ./src/* ./src/
ADD pom.xm
However, the structure in docker image is different. Particularly, I can no longer find main and test folders.
$ tree -L 3
.
├── pom.xml
├── src
│   ├── groovy
│   │   └── com
│   ├── java
│   │   └── com
│   └── resources
│   ├── ext_sample_input.json
│   ├── hist_sample_input.json
│   └── sample_input.json
Why is it so?
From official documentation:
Note: The directory itself is not copied, just its contents.
Change your ADD statement to:
ADD ./src ./src/

docker-compose up with multiple yml confs does not start off

This is the tree structure of my project:
.
├── backend-codebase
│   ├── app.js
│   ├── bin
│   │   └── www
│   ├── config.js
│   ├── db
│   │   ├── index.js
│   │   ├── repos
│   │   │   └── todos.js
│   │   └── sql
│   │   ├── index.js
│   │   └── todos
│   ├── dev
│   │   └── postgres
│   ├── index.js
│   ├── package.json
│   ├── public
│   │   ├── images
│   │   ├── javascripts
│   │   └── stylesheets
│   │   └── style.css
│   ├── routes
│   │   ├── api.js
│   │   ├── index.js
│   │   └── users.js
│   ├── scripts
│   │   ├── applyFixtures.js
│   │   ├── dev_entrypoint.sh
│   │   ├── fixtures.json
│   │   └── psql_dump.sql
│   ├── views
│   │   ├── api.ejs
│   │   ├── db.ejs
│   └── yarn.lock
├── dev
│   ├── Dockerfile-node
│   ├── Dockerfile-postgres
│   ├── development.sh
│   ├── docker-compose-common.yml
│   ├── docker-compose-dev.yml
│   └── postgres
│   ├── 12-12-2016_16_58_59.dump
...
I use docker-compose in order to create three containers and orcherstrate everything:
- a node server
- a postgres DB
- a data container for the DB
plus, I created two (and a third one is missing) yaml files under /dev/docker-compose-*.yml. docker-compose-dev extends the common one and should build the images as well as run all the images.
In order to start off everything I tried to launch the following:
$ docker-compose up --file dev/docker-compose-common.yml --file dev/docker-compose-dev.yml
But what I get is this output:
Builds, (re)creates, starts, and attaches to containers for a service.
Unless they are already running, this command also starts any linked services.
The `docker-compose up` command aggregates the output of each container. When
the command exits, all cont
I really don't understand what I'm doing wrong
Silly, silly me.
It was simply the order between the arguments and the command upside-down.
Plus, I can remove the first --file argument, since it is referenced by using the extends yaml key.
docker-compose -f dev/docker-compose-dev.yml up

pub serve Transformer library "package:observe/transformer.dart" not found

When run pub serve on Mac, it could not find transformer.dart:
Transformer library "package:observe/transformer.dart" not found
I'm using OSX 10.9, DartEditor 30798.
pub build works fine.
I searched and saw pub build fails if proxy is define. But I'm connecting to network directory without proxy.
Here is the observe package under packages directory, transformer.dart is there:
observe
├── html.dart
├── observe.dart
├── src
│   ├── bind_property.dart
│   ├── change_notifier.dart
│   ├── change_record.dart
│   ├── compound_path_observer.dart
│   ├── dirty_check.dart
│   ├── list_diff.dart
│   ├── list_path_observer.dart
│   ├── metadata.dart
│   ├── microtask.dart
│   ├── observable.dart
│   ├── observable_box.dart
│   ├── observable_list.dart
│   ├── observable_map.dart
│   ├── path_observer.dart
│   └── to_observable.dart
├── transform.dart
└── transformer.dart
I had such problem in the renamed polymer project. After I made new polymer project and copy all logic in created files. The problem was solved.

Resources